activity启动模式
来源:互联网 发布:网络机柜中u表示什么 编辑:程序博客网 时间:2024/06/05 10:56
Activity的四种启动模式如下:
standard、singleTop、singleTask、singleInstance
可以在AndroidManifest.xml中通过给标签指定android:launchMode模式来选择启动模式
standard模式
standard是活动的默认启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
singleTop模式
当启动模式指定为singleTop模式,每次启动活动时如果发现返回栈的栈顶已经是该活动,则可以直接使用它,不会再创建新的活动实例。如果该活动没有处于栈顶的位置,那么就可以再次创建该活动。
singleTask模式
当启动模式指定为singleTask模式,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
singleInstance模式
当启动模式为singleInstance模式,该活动会启用一个新的返回栈来管理这个活动。这个活动的实例独立运行在单独的Task中,不允许有别的活动存在。
那么这么做有什么意义呢?假设我们程序中有一个活动是允许其他程序调用,如果我们想其他程序和我们的程序可以共享这个活动的实例,应该如何实现呢?使用前面3种启动模式肯定做不到的,因为每个应用程序都有自己的返回栈,同一个活动在不同的返回栈中入栈必然是创建了新的实例。而是用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。
活动被回收了怎么办?
@Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); setContentView(R.layout.activity_main); if(savedInstanceState != null){ String tempData = savedInstanceState.getString("data_key"); //String persistentData = persistentState.getString("data_key"); } } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); String tempData = "something you just typed"; outState.putString("data_key",tempData); //String persistentData = "i don't know"; //outPersistentState.putString("data_key",persistentData); }
最后记得在配置文件中注册当前Activity的时候加上这个属性,android:persistableMode=”persistAcrossReboots”,这样就可以给你的Activity存储一些持久化数据。当你的手机重启或者发生其他意外情况的时候,也可以给你的页面获取到相关数据。
- android Activity启动模式
- Android Activity启动模式
- activity启动模式详解
- Activity启动模式1
- activity的启动模式
- Activity有四种启动模式
- Activity启动模式
- activity启动模式分析
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式总结
- Activity的启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- 公共基础知识之程序设计基础
- 算法: 有一堆纸币,自己和对方都只能选择纸币中最大的或纸币中最小的,用动态规划法求出怎样自己才能拿到最多的钱
- NOIP2015 推销员
- 字符判断
- 后台知识简要整理
- activity启动模式
- FBReader接入
- POJ 1061 青蛙的约会(扩展欧几里德)
- 轻松学会Git
- Java实现八大排序算法
- 高并发测试可能遇到的问题解决方法
- epoll为什么这么高效?
- 关于基数进制转换方面的问题
- Java并发编程:volatile关键字解析