第一行代码笔记3

1.每个活动再其生命周期中有四种状态:

    运行状态 :当一个活动位于返回栈的栈顶的时候

    暂停状态:当一个活动不是位于栈顶,但是仍然可见

    停止状态:当一个活动不是位于栈顶,而且也不可见

    销毁状态:当一个活动再返回栈中移除的时候

2生存期

onCreate() 活动第一次创建的时候调用  完成活动的初始化,比如加载布局,绑定事件

onStart()   活动由不可见变可见的时候调用

onResume  这个活动和用户交互的时候调用,所以此时这个活动位于栈顶并且处于运行状态

onPause  在系统会启动或者恢复另一个活动的时候调用

onStop   在活动完全不可见的时候调用

onDestroy   在活动被销毁之前调用,之后活动状态变成销毁状态

onRestart   活动由停止状态变为运行状态的时候调用,也就是活动被重新启动

第一行代码笔记3_第1张图片

第一行代码笔记3_第2张图片


3.活动被回收怎么办

有一种情况是这样的当我们使用activityA启动activityB的时候,activityA处于停止状态,那么这个活动就有可能被系统回收(当被回收后我们在activityB中按Back键的还是返回到activityA活动窗口(此时这个activityA是通过onCreate方法重新创建的))如果activityA中保存有数据的话会丢失

解决方法:onSaveInstanceState()回调方法 这个方法会保证活动被回收的时候被调用

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String value = "save Date";
    outState.putString("value",value);
}
通过一个Bundle来存储数据,然后这个通过onCrea取出来

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState!=null){
        String value = savedInstanceState.getString("value");
    }
}
onCreate中的Bundle一般是null的但是当活动被系统回收之前通过onSaveInstanceState方法来保存数据的话,这个参数就会带有之前所保存的全部数据,我们就可以把数据给取出来


4活动的启动模式

standard(默认模式) 每当启动一个新的活动,就会处于栈顶,并且每次都会创建该活动的一个新的实例

第一行代码笔记3_第3张图片

singleTop  当启动活动发现返回栈的栈顶已经是该活动,那么直接使用它,不会再创建新的实例

注意下面的这个特殊情况

第一行代码笔记3_第4张图片

singleTask 每次启动该活动的时候系统都会在返回栈中检查是否存在该活动的实例,如果有就把这个活动之上的所有活动统统出栈,如果没有就创建一个新的活动实例

第一行代码笔记3_第5张图片

这个时候按下Back键就会推出程序

singleInstance 启动一个新的栈来管理这个活动:这种模式下有一个单独的返回栈来管理这个活动,不管是哪一个程序来访问这个活动,都共用同一个返回栈,就可以实现其他程序和我们的程序共享这个活动的实例

第一行代码笔记3_第6张图片


上面的模式是在AndroidMainifest,xml中指明

    android:launchMode="singleTop"
    android:name=".MainActivity"
    android:label="@string/app_name" >
    
        android:name="android.intent.action.MAIN" />

        android:name="android.intent.category.LAUNCHER" />
    

5.知道当前是哪一个活动的方法

思路:创建一个新的类(BASEActivity)继承Activity重写onCreate方法,然后让Baseactivity成为所有活动的父类

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(" BaseActivity",getClass().getName());
    }
}





你可能感兴趣的:(android,android,android,studio)