现在的位置: 首页 > 综合 > 正文

android 小谈activity的四种启动模式

2018年04月19日 ⁄ 综合 ⁄ 共 1497字 ⁄ 字号 评论关闭
<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在一些特殊情况下,为了避免糟糕的用户体验,常常采用非常规的Activity启动模式</span>


1,standard,默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

2,singletop:如果发现任务栈的栈顶已经存在这个activity,再去开启activity时,就不去重新创建新的activity,而是复用这个栈顶已经存在的activity。避免同一个界面被重复开启。

3,singletask:开启一个activity B的时候,检查任务栈里面是否有这个activity B的实例存在,如果存在的话,清空这个任务栈activity B上面的所有的activity.复用这个activityB。

应用:浏览器,不管开启多少个页面,都只在同一个activity中,避免创建过多的activity的实例,节约内存空间,CPU资源。

4,singleInstance: 开启一个新的任务栈 任务栈里面只有一个activity的实例存在,如果这个activity被开启,把这个任务栈放在前面,如果开启了新的别的activity,别的activity所在的任务栈会被放在前面。

应用:比较极端 在整个手机的操作系统里面只会有一个实例存在,例如:有道词典 快速取词,拨号界面,紧急拨号。为了保证单例性

-----------------------------------

Intent 启动另一应用的Activity

ComponentName componentName = new ComponentName("com.magic.bluetoothchat",
        "com.magic.bluetoothchat.BluetoothChat");
try {
    Intent intent = new Intent();
    intent.setComponent(componentName);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(Intent.ACTION_VIEW);
    mContext.startActivity(intent);
} catch (Exception e) {

}
//<span style="font-family: Arial, Helvetica, sans-serif;">在BluetoothChat onCreate中添加如下代码,可实现锁屏状态下启动Activity</span>


final Window w=getWindow(); //show on locked screen only if live
        w.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); //show on top of screen lock – for app only
        w.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //turn on screen – phone global
        w.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); //dismiss unsecure screen lock – phone global



抱歉!评论已关闭.