Android 开发艺术探索(笔记)--1. Activity 生命周期

来源:互联网 发布:苹果软件无法安装 编辑:程序博客网 时间:2024/05/05 05:28

异常生命活动

1. 系统资源配置改变导致Activity被杀死并重新启动

activity在这种情况下(onPause,onStop,onDestory)均会被调用;同时由于是异常情况,系统会调用onSaveInstanceState(在onstop之前调用,和onpause没有既定的关系)保存数据;注:该方法只会在异常状况下调用
onRestoreInstaceState:在Activity 重新创建时调用,同时也会把异常时保存的数据传递到该方法(onCreate也会传递到);时机上该方法在onStart之后;
这里写图片描述

protected void onCreate(Bundle saveInstanceState){      super.onCreate(saveInstanceState);      setContentView(R.layout.activity_main);      if(saveInstanceStace != null){      String test = saveInstanceState.getString("key_string");   }}protected void onSaveInstanceStace(Bundle outState){      super.onSaveInstanceStace(outState);      if(saveInstanceStace != null){      outState.putString("key_string","test");   }}protected void onRestoreInstanceStace(Bundle saveInstanceState){      super.onRestoreInstanceStace(saveInstanceState);     String test = saveInstanceState.getString("key_string");}

注:onRestoreInstanceStace中一定是会有值返回的,onCreate中可能是空因此要进行判断
一般情况下异常处理时。使用onRestoreInstanceStace恢复数据。注意这里onRestoreInstanceStace和onSaveInstanceStace,是在异常终止并且系统有机会恢复的情况下才会保存数据和恢复数据。

2.资源内存不足导致低优先级被杀死

这里写图片描述
在activity 中设置configChange可以防止重新创建,可配置的属性有很多;但一般常用的有
:locale,orientation,keyboardHidden等,其中screenSize和smallesScreenSize行为和编译选项有关,和运行环境无关。

3. Activity 的启动模式

  1. 安卓是靠一种“后进先出”的任务站模式来管理每个Activity的生成和销毁,没一起新的Activity(不管是不是同一个)都会放入任务栈中;
  2. 四种启动模式:standard,singleTop,singleTask,singleInstance;
    这里写图片描述

    • ### 设置启动模式 ###
      1) 菜单(Androidmenifest)文件
<activity            android:name=".MainActivity"            android:label="@string/app_name"            android:theme="@style/AppTheme.NoActionBar"            android:launchMode="singleTask"            >

2) intent设置

      Intent inten = new Intent();      inten.setClass(MainActivity.this,SecondActivity.class);      inten.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      startActivity(inten);

通过:adb shell dumpsys activitymin命令可以查看当前栈中的情况

Activity flags

1.interFilter 匹配规则
intent一般不能即是显式调用又是隐式调用,二者共存显式为主;

  • intentFilter(action,category,data)
0 0