㈠ android每个应用都有一个堆栈task来存放启动的Activity实例我不能理taskid在实际开发中的作用是什么
在开发中,Task的概念应该是与Activity栈相对应的。
换言之,Activity通过不同的启动模式去启动,所处的Task是不一样的(如singletask)。
相应的也就会对画面迁移和内存分配等问题产生影响。
暂时就想到这些~
㈡ android堆栈的问题 压栈退栈 求救啊!
这个应该不需要自己处理吧,安卓框架Activity栈自己就处理了吧。入栈是A --> C --> C1 --> B根据栈的特性,那出栈肯定就是 B C1 C A
㈢ 如何获得当前的activity android
android开发中获取当前的Activity有多种情况;
在Activity中,this就是当前的Activity,例如this.startActivity。
在Fragment中可以通过 getActivity()来得到当前装载这个Fragment的Activity。
通过Activity堆栈来获取当前显示的这个Activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
㈣ Activity四种启动模式有哪些
Activity的启动模式可以通过AndroidManifest.xml文件中的<activity>元素的属性来指定,一共有4中模式:
<activity android:name="ActivityMain" android:launchMode="singleTask"></activity>
1 standard
2 singleTop
3 singleTask
4 singleInstance
这4中模式又分两类,standard和signleTop属于一类, singleTask和signleInstance属于另一类。
standard和singleTop属性的 Activity 的实例可以属于任何任务(Task),并且可以位于Activity堆栈的任何位置。比较典型的一种情况是,一个任务的代码执行 startActivity(),如果传递的 Intent 对象没有包含 FLAG_ACTIVITY_NEW_TASK 属性, 指定的 Activity 将被该任务调用,从而装入该任务的Activity 堆栈中。 standard和singleTop的区别在于:standard模式的Activity在被调用时会创建一个新的实例,所有实例处理同一个 Intent对象; 但对于singleTop模式的Activity,如果被调用的任务已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建, 任务会使用当前顶端的Activity实例来处理Intent对象,换句话说,如果被调用的任务包含一个不在堆栈顶端的 singleTop Activity, 或者堆栈顶端为 singleTop 的Activity的任务不是当前被调用的任务,那么,仍然会有一个新的Activity对象被创建。
singleTask 和 singleInstance模式的Activity 仅可用于启动任务的情况, 这种模式的Activity总是处在Activity堆栈的最底端,并且一个任务中只能被实例化一次。两 者的区别在于:对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动; 对于 SingleTask模式的Activity,它在堆栈底端,其上方可以有其他Activity被创建, 但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前 的Activity。
在多Activity开发中,有可能是自己应用间的activity 跳转,或者夹带其他应用的可复用activity。可能会希望跳转到原来某个activity实例,而非产生多个重复的activity。我们可借助 activity 四种启动模式来实现不同的需求:
standard 默认模式 --------- 来了intent,每次都创建新的实例。
singleTop -------- 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该
activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个activity,这感觉肯定不爽。
singleTask ---------- 来了intent后,检查栈中是否存在该activity的实例,如果存在就把intent发送给它,否则就创建一个新的该activity的实例,放入 一个新的task栈的栈底。肯定位于一个task的栈底,而且栈中只能有它一个该activity实例,但允许其他activity加入该栈。解决了在一 个task中共享一个activity。
singleInstance ----------- 肯定位于一个task的栈底, 并且是该栈唯一的activity。解决了多个task共享一个activity。
㈤ android 中怎样能够清除activity堆栈,也就是退出整个应用
如果退出整个程序,如下操作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0); 方式二:android.os.Process.killProcess(android.os.Process.myPid()); android 完全退出程序有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity首先想到的是清空activityA的堆栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是该activityA不是已经存在于堆栈底端的,所以清除的只是堆栈中该activityA上面的activity,但后退后还是会返回堆栈中该activityA下面的activity。
㈥ android 弹出dialog时activity的生命周期处在什么状态
处于pause状态。
当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity (如弹窗dialog)被放置在栈顶,此时的状态叫做暂停状态(Paused)。
此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以仍然可见,但已经失去了焦点故不可与用户进行交互。
(6)androidactivity堆栈扩展阅读:
activity的其它状态:
1、运行:如果当前的activity在前台界面上时(堆栈顶端)。
2、停止:如果activity完全被另一个全屏活动遮挡住时,它将会停止。该活动也仍保留全部的状态和成员信息,但将会被隐藏起来不再展示给用户,并且当内存在其他地方被需要时该活动就将会被系统杀死。
3、重启:如果activity处于暂停或者停止状态,系统将会在内存中终止该活动无论是结束活动或者杀死进程。当它再一次展示给用户时,它必须是完全重启并且恢复到之前的状态。
㈦ android 怎么查看activity堆栈
这是一个比较典型的:A是欢迎界面,B是主菜单,CD..是菜单的详细。 A界面显示过后finish掉,BCD activity的LAUNCH MODE设置为singletask,就会满足你堆栈中只有一个实例的想法。