您的位置:首页 > 移动开发 > Android开发

Activity的“四种”启动模式

2015-12-14 11:49 295 查看
Activity的启动模式.(熟悉)
1. "standard" (the default mode) 标准模式(activity默认的模式), 
当调用startActivity方法开启界面, 会实例化多个实例在任务栈中, 相互不影响.
问题: 会在任务栈中实例化多个对象. 重复的太多. 容易内存溢出.

2. "singleTop" 单顶部模式. 
如果被开启的activity已经在任务栈的顶部, 这时候不会创建一个新的实例, 而是调用栈顶activity的onNewIntent方法.
如果当前任务栈中已经有被开启的activity, 但是不在顶部, 这时候会创建一个新的实例在任务栈中.
应用场景: 有些流氓程序员, 攻击我们程序, 不停的开启页面, 就采用单顶部模式就可以解决【重要】.

3. "singleTask" 单任务栈.
如果被开启的activity已经存在任务栈中, 那调用startActivity方法开启此页面时, 不会再创建一个新的实例, 调用onNewIntent方法.
而是把当前的activity显示出来(提到栈顶), 同时, 会把当前任务栈中activity以上的所有activity全部清除出栈.
如果说当前的activity已经在栈顶, 直接调用onNewIntent方法.
应用场景: 一般应用在页面加载非常庞大时, 非常消耗资源. 只想初始化一次就够了, 以后不想再初始化实例, 就采用singleTask模式.

4. "singleInstance". 单一实例.
如果被开启的activity没有实例化过对象, 调用startActivity开启页面时, 会创建一个新的任务栈给activity使用, 
并且当前任务栈只有它自己存在, 其它的activity不会在此任务栈中创建新的实例.
如果被开启的activity已经实例化过, 那么会调用onNewIntent方法.
在整个系统中, 无论哪一个应用程序开启当前采用singleInstance的activity, 
如果已经实例化过, 那么始终都是调用的同一个activity, 而且是在同一个任务栈中.
应用场景: 需要常驻系统中的页面采用这种方式.(比方说桌面应用程序)

<activity android:name=".MainActivity" android:launchMode="standard" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息