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

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

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

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

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

2生存期

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

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

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

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

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

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

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




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(默认模式) 每当启动一个新的活动,就会处于栈顶,并且每次都会创建该活动的一个新的实例


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

注意下面的这个特殊情况


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


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

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



上面的模式是在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());    }}





更多相关文章

  1. 简述Unity中调用Android方法
  2. Android(安卓)Ashmem相关介绍
  3. Android隐藏状态栏实现沉浸式体验
  4. 【Android自定义View】 仿照腾讯漫画自定义Toast的实现
  5. android listview为什么会执行很多次,频繁调用getview
  6. [置顶] Android中调用系统相机、系统相册来获取图片,并裁剪图片。
  7. Android(安卓)ContentProvider数据共享全解析
  8. Android视频播放器实现小窗口和全屏状态切换
  9. Android透明状态栏与沉浸模式全解

随机推荐

  1. 如何快速启动安卓模拟器(Android(安卓)Em
  2. Android(安卓)ListView 去除边缘阴影、选
  3. AndroidRuntime 流程
  4. android横屏竖屏设置
  5. android多屏幕适配(1)
  6. Ubuntu11.10下编译android内核源码
  7. [Android] ContentProvider实例详解
  8. android WebView知识
  9. Dagger 2 在 Android(安卓)上的使用(六)
  10. Android中RelativeLayout各个属性的含义