当前位置:首页 » 安卓系统 » androidsingletask

androidsingletask

发布时间: 2022-05-26 02:14:50

① android singletask模式下广播在ondestory方法里解绑为什么不能执行

因为
android singletask模式下调用finish();是不会走
ondestory();方法的

② android singletask怎么再次走生命周期

一个activity就只有一个生命周期,如果它已处于停止状态,它已被销毁(destory),如果你的意思是再次回到该activity,那你只能在Task中在压入一个新的activity(用intent setClass,然后startActivity)

③ android新手 singleTask

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。

这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。

加载模式分类及在哪里配置

Activity有四种加载模式:

standard

singleTop

singleTask

singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:

<activity
android:name="ActB"android:launchMode="singleTask"></activity>

也可以在Eclipse
ADT中图形界面中编辑:

另外,可以看到两个Activity的taskId是不同的。

④ Android 深入探讨sigleTask和singletop的区别

1.singleTask和singletop都是保真了Activity在栈中的唯一性

2.singleTask和singleTop实例存在时,都不会重新创建 new task

不同之处有如下几点:

如果singleTask启动的ActivityA位于栈底,在栈顶startActivity到这个ActivityA时会调动
onNewIntent->onStart->onResume。

但singleTask启动的的ActivityA不存在时,会重新创建ActivityA,调用方式OnCreate->OnStart->OnResume

2.如果singletop启动的ActivityB在栈底时,在栈顶startActivity到这个ActivityB时会重新调动
onCreate->onStart->onResume,但不会调用OnDestroy

并且singletop启动的的ActivityB不存在时,会重新创建ActivityB,调用方式OnCreate->OnStart->OnResume

3.singleTask在栈底时,从栈顶startActivity到栈底ActivityA,那么该栈startActivity的发起者的中间部分Activity会被销毁。而singletop是逐级跳跃到栈顶

singleTask

追加一点singleInstance,虽然也是保证唯一性,但改模式的Activity是全局性的唯一性,生命周期和应用程序相同,不能及时回收,此外的话Activity在MVC充当Controller的角色,

这点显然对singleIntance来说不适合,因此不建议使用。

4.singleTask不适合充当ChildActivity,但singletop适合

5.对作业栈,默认情况下,没有任何影响,因为栈的taskid是相同的,可以获取getTaskid(),默认情况下每个activity的taskid相同

但是,如果自定义了栈的标签(这个标签相同的singletask activity在同一个作业栈中),那么taskid就会初选差别

android:taskAffinity="com.sample.lanchmode.tester.main",那么一旦另一个作业栈被销毁,下次必然重建(相信我,这不是废话)。

为了一句不是废话,我需要来证明一下。

当我们的初始加载WelcomeActivity界面--->HomeActivity界面时,如果将HomeActivity的启动模式设置为sigleTask+android:taskAffinity="自定义(一般是类名)",

①那么WelcomeActivity销毁后,在到达HomeActivity之后,HomeActivity回作为一个新的作业栈栈底而存在,所以由HomeActivity启动的Activity的TaskId和HomeActivity相同。

②这个过程,WelcomeActivity和HomeActivity的TaskId是不相同的,问题出现了,当我们按下 Home键,然后在点击桌面上的app图标你会发现,WelcomeActivity再次出现了,

而且再次进入了HomeActivity,并且这个HomeActivity调用了OnNewIntent,却没掉用OnCreate,所以来说他一直存在这,但你需要再次过渡才能找到它。

(对于追求捕获Home键让app退出的读者是一个喜讯,这样可以做到每次Home之后都能再次进入登录界面),在这个过程中没有直接进入HomeActivity,而是WelcomeActivity(有人说不对么,不应该是这样么,在这里不想解释)。

注意,使用了不同作业栈的Activity,会在最近打开的app显示一个应用会出现2个界面。

在这里,需要强调一下singleTask+android:taskAffinity不一定必须使用,请依据需求而定,网上有人推荐使用,但我却想说,不要盲目,并不是所有的应用都适合。

1-->
singleTask+android:taskAffinity对于效率而言,优势并不存在,比如设置进程的,但对于带有登录状态的app需要慎用,否则造成信息泄露等问题,开发中只使用singleTask即可。

2-->
singleTask+android:taskAffinity适用于单用户保密性的app(可做到Home之后下次必须登录才能查看信息),建议在这方面试试。

转载

⑤ android启动模式设置为single task任务栈为什么

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四种启动模式: 1. standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。 3. singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 4. singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 其中standard是系统默认的启动模式。 下面通过实例来演示standard的运行机制: 1 private TextView text_show; 2 private Button btn_mode; 3 4 @Override 5 public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 text_show = (TextView) this.findViewById(R.id.text_show); 10 11 text_show.setText(this.toString()); 12 13 btn_mode = (Button) this.findViewById(R.id.btn_mode); 14 15 } 16 //按钮单击事件 17 public void LaunchStandard(View v){ 18 startActivity(new Intent(this,MainActivity.class)); 19 20 text_show.setText(this.toString()); 21 }

⑥ Android四种启动模式在什么时候使用

standard(默认)
系统默认的启动模式。
Android是使用返回栈来管理活动的,在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。
对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,而是每次启动活动都会创建该活动的一个新的实例。

singleTop
android:launchMode="singleTop"
当活动的启动模式指定为singleTop,在启动活动时,如果发现该返回栈的栈顶已经是该活动时,则认为可以直接使用它,不会在创建新的活动实例

singleTask
当活动的启动模式指定为singleTask,每次启动该活动时,首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在就直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
android:launchMode="singleTask"

singleInstance
指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,解决了共享活动实例的问题
修改SecondActivity的启动模式
android:launchMode="singleInstance"

使用方式:

standard:怎么样都要创建
singleTop:顶上不是target Activity,new一个
singleTask:顶上不是target Activity,移除target之上的,把自己变成top。
singleInstance:开辟私有的task,完全独立于程序的其他activity的task。

使用场景:
standard:普通activity
singleTop:要展示推送过来的消息
singleTask:程序入口等启动页面
singleInstance:完全独立的,类似闹钟的提示

⑦ android singletask为什么没有作业

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 这需要为Activity配置特定的加载模式,而不是使用默认的加载模式

⑧ Android设置launchMode为singleTask的Activity怎么刷新页面内容

在需要启动另一个activity,并传递一些数据时,我们常采取如下的方法:
Intent intent = new Intent(this, ActivityB.class);

intent.putExtra("name", mUserName);

startActivity(intent);

同时在ActivityB中的onCreate()或onResume()方法中获取传递的数据:

Bundle bundle = getIntent().getExtras();

if (bundle != null && bundle.containsKey("name")) {

mUserName = bundle.getString("name");

}

但是,当把ActivityB的加载方式设置为singleTask或singleInstance时,我们会发现,除了第一次能正确接收以外,其他的好像都是为空?

原来,activity的getIntent()方法只是获取activity原来的intent。因此要想解决上述问题,可采用的办法之一是重载onNewIntent()方法。

@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

setIntent(intent);

//here we can use getIntent() to get the extra data.

⑨ android 怎么实现返回主界面

1.
将主页面activity设置为singleTask启动方法。
2.
直接在返回的时候跳转到主页面即可。
代码如下:
//MainActivity为你的主页面activity,activity为现在的页面
Intent i = new Intent(activity.this,MainActivity.class)
startActivity(i);
原理:当activity为singleTask的时候跳转会清空当前activity任务栈上面所有的activity。

⑩ 如何很好的理解安卓的四种开发模式

安卓中的是四种启动模式分别为standerd,singletop,singletask,singleInstance。
standerd是标准启动模式,也就是默认的启动的模式。这种模式每次都会创建一个新的实例,在退出的时候在分别出栈。
singleTop每次创建时,会先看看栈中的栈顶有没有改实例,如果有就拿来用,没有就自己创建。

热点内容
随机启动脚本 发布:2025-07-05 16:10:30 浏览:527
微博数据库设计 发布:2025-07-05 15:30:55 浏览:25
linux485 发布:2025-07-05 14:38:28 浏览:305
php用的软件 发布:2025-07-05 14:06:22 浏览:756
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:432
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:704
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:241
java的开发流程 发布:2025-07-05 12:45:11 浏览:686
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:285
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:835