zoukankan      html  css  js  c++  java
  • [android] activity的生命周期

    MainActivity里面重写以下方法:

    在这些方法里面打印log日志,为了方便查看在filter里面增加一个System.out来过滤

    onCreate()

    onDestory()

    onPause()

    onResume()

    onStart()

    onStop()

    第一次打开一个activity和关闭时,这个调用顺序onCreate ==> onStart  ==> onResume ==>关闭  ==> onPause  ==> onStop ==> onDestroy

     

    打开第二个activity的流程,第一个界面的状态  onCreate  ==>  onStart  ==>  onResume  ==> 打开第二个activity  ==>  onPause  ==>  onStop  ==>  关闭第二个  ==>  onStart  ==>  onResume  ==> 关闭第一个  ==>  onPause  ==>  onStop  ==>  onDestroy

    测试获取焦点和失去焦点,建立第三个Activity,修改样式,在预览界面有一个AppTheme的小控件,里面Theme有个对话框的选项,在清单文件中,给<activity/>节点添加主题属性

    设置主题android:theme=”@android:style/Theme.Dialog” 系统R文件的样式,对话框的风格

    点击按钮打开这个activity,这时第一个界面会调用 onPause 方法,失去焦点

    点击空白部分,第一个界面会得到焦点,onResume 方法

    生命周期两两对应,可以分为三个,完整生命周期,可视生命周期,前台生命周期,点击后退按钮会销毁activity

    生命周期的使用场景,数据的持久化,比如在写微博,当用户不小心按了后退按钮,activity会调用onDestroy方法,我们就可以把数据存到文件或者sp里面

    当界面从新可见的时候,会调用onStart方法,我们可以做一些界面的更新或者业务逻辑的变化

    比如:当跳转了activity,要求用户配置某些东西时,用户没有配置就点了返回,这时,我们可以把检测网络的代码写到onStart()方法里面,这样用户体验不好,可以使用对话框

    获取AlertDialog.Builder对象,通过new Builder(context)得到,参数:上下文

    调用builder对象的setTitle()方法,设置标题

    调用builder对象的setMessage()方法,设置内容

    调用builder对象的setPositiveButton(text,listener)方法,设置确定按钮,参数:文字,OnClickListener接口对象,通过匿名内部类直接new出来,重写onClick()方法

    调用builder对象的create()方法调用show()方法,创建并展示出来

    package com.tsh.lifecye;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            System.out.println("onCreate");
        }
        //提示对话框
        @Override
        protected void onStart() {
            super.onStart();
            System.out.println("onStart");
            AlertDialog.Builder builder=new Builder(this);
            builder.setTitle("提示");
            builder.setMessage("我是一个好人");
            builder.setPositiveButton("确定", new OnClickListener() {
                
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "yes是的", 0).show();
                }
            });
            builder.create().show();
        }
    
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            System.out.println("onResume");
        }
    
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("onPause");
        }
    
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            System.out.println("onStop");
        }
    
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            System.out.println("onDestroy");
        }
    }
  • 相关阅读:
    js回调函数
    axios如何先请求A接口然后在请求B接口
    蓝桥杯省赛 区间移位(二分+玄学贪心)
    P1403 [AHOI2005]约数研究(筛法)
    P1029 最大公约数和最小公倍数问题(数论水题)
    洛谷P1147连续自然数和(前缀和)
    洛谷P1017进制转换(进制转换/取模)
    洛谷P1088火星人(stl/全排列)
    Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) D. Navigation System(最短路)
    Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(贪心+暴力)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5321257.html
Copyright © 2011-2022 走看看