Application,activity stack task和 Task的区别

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&简单游戏 快乐生活
您当前的位置:
>> >> >>正文
Activity的四种加载模式
编辑:wudihan
来源:Android中文网
发布时间: 9:42:50
  Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题。直到后来随着不断的深入,才发现原来Activity的加载还分为四种不同加载模式。灵活的使用合适的加载模式,可以避免产生大量的重复的Activity,从而优化性能,减少系统资源消耗。
  四种加载模式具体为:
  standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。  singleTop: 检查是否已经存在了一个实例位于Activity Stack的顶部,如果存在就不产生新的实例,反之则调用Activity的newInstance()方法产生一个新实例。  singleTask: 在一个新的Task中产生这个实例,以后每次调用都会使用此实例,而避免产生新的实例。  singleInstance: 这个基本上跟singleTask一样,只是有一点不同,那就是在这个模式下的Activity实例所处的Task中,只能有这一个Activity实例,而不能有其他的实例。
  这些启动模式可以Android清单文件AndroidManifest.xml中,通过&activity&中的launchMode属性进行设置,如:
  AndroidManifest.xml
  &&activity android:name="MainActivity" android:launchMode="singleTop"&  &&& &intent-filter&  &&&&&&& &category android:name="android.intent.category.DEFAULT" /&  &&& &/intent-filter&  &/activity&
  Java Code
  &Intent intent = new Intent(SrcActivity.this, TargetActivity.class);  &intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  &startActivity(intent);
  四种加载模式的区别如下:
  1.所属Task的区别:  一般情况下,,“standard”和”singleTop”两种加载模式源Activity(即new Intent(arg0,arg1)中的第一个参数)和目标Activity(即new Intent(arg0,arg1)中的第二个参数)在同一个Task内,除非Intent包括了参数FLAG_ACTIVITY_NEW_TASK,如包含了此参数,目标Activity会起动到新的Task里;  “singleTask”和“singleInstance” 总是把目标Activity作为一个Task的根元素,他们不会被启动到一个其他Task里。
  2.是否允许多个实例的区别:  standard”和”singleTop”可以允许有多个实例,并且可以位于不同的Task中;  singleTop要求如果Activity Stack顶部已经有目标Activity实例,则直接讲Intent发送给该实例,而不创建新实例。如Activity Stack没有该实例,则创建新实例;   “singleTask”和”singleInstance”则只产生一个实例,并且是Task的根元素。“standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例;“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。
  3.是否允许其他Activity存在于本Task内的区别:  “singleInstance”独占一个Task,其他Activity均不能存在于此Task中,如果它启动一个新的Activity,不管新的Activity的launch mode如何,新的Activity都将运行于其他Task里;        另外三种模式则可以和其他Activity共存。
  4.是否每次都生成新实例的区别:  “standar”模式每次都生成一个新的Activity实例;  “singleTop”的Activity如果在Task的Activity Stack顶部则不生成新实例,直接使用此实例,否则生成一个新实例。  “singleeInstance”是其所在Task的Activity Stack里的唯一Activity实例,它每次都会被重用  “singleTask”如果在Task的Activity Stack的顶部,则接收intent,否则该intent会被丢弃,但仍然会该Task返回前台。
关注安卓中文网官方微信
扫描左侧二维码即可添加安卓中文网官方微信
您也可以在微信上搜索“安卓中文网”或“anzhuozww”,获取更多数码资讯
24小时热点学习Android,了解一些基本概念将有助更深入的去学习和理解Android。在这里,所要讲诉的是Android里三个比较基础的概念:Android&&Application、Activity Stack 和 Task。
  1. 什么是Android Application?
  Android Application就是一个android应用程序。 简单的理解就是一个apk就是一个Android Application。例如Android平台下自带的应用程序:Browser、Contacts、camera等。
  每一个Application都是由Activity、Service、content Provider和Broadcast
Receiver等Android的基本组件所组成,其中Activity是实现应用程序的主体,它承担了大量的显示和交互工作,甚至可以理解为一个界面
就是一个Activity。
  2. 什么是Activity Stack?
  如上所诉,Activity承担了大量的显示和交互工作,从某种角度上将,我们看见的应用程序就是许多个Activity的组合。为了让这许多
Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈
顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity,这也是符合逻辑的。
  在操作应用程序时,每次启动新的Activity,都会将此压入Activity Stack,当用户执行返回操作时,移除Activity
Stack顶上的Activity,这样就实现了返回上一个Activty的功能。直到用户一直返回到Home
Screen,这时候可以理解为移除了Activity Stack所有的Activity,这个Activity
Stack不再存在,应用程序也结束了运行。
  3. 什么是Task?
  Task是指将相关的Activity组合到一起,以Activity
Stack的方式进行管理。从用户体验上讲,一个&应用程序&就是一个Task,但是从根本上讲,一个Task是可以有一个或多个Android
Application组成的。例如:你想在发送短信时,拍一张照并作为彩信发出去,这时你首先停留在短信应用程序的的Acitivity上,然后跳转到
Camera应用程序的Activity上,当完成拍照功能后,再返回到短信应用程序的Activity。这实际上是两个Android
Application协同合作后完成的工作,但为了更好的用户体验,Android平台加入了Task这么一种机制,让用户没有感觉到应用的中断,让用
户感觉在一&应用程序&里就完成了想完成的工作。
阅读(...) 评论()activity task_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
activity task
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢android刷新activity
来源:ACT@跟谁学
private static AppU,AppUtils类(储存每一个Activity,该对象中有一个Activity容器(具体实现自己处理,public static AppUtils getInstance(),并实现关闭所有Activity的操作),使用单例模式创建一个Activity管理对象,//添加Activity到容器中,public class AppUtils extends Application{,{,{...
关于commit()方法 调用commit()方法并不能立即执行transaction中包含的改变动作,commit()的一系列转换作为一个transaction被存储在back stack中,可以调用 FragmentTransaction 中的方法来处理这个 transaction,commit()方法把transaction加入activity的UI线程队列中,可以调用executePendingTransactions()方法来立即执行commit()提供的transaction,用FragmentManager可以做的工作有: 得到Activity中存在的fragment : 使用findFragmentById() 或 findFragmentByTag() 方法,注意:你只能在activity存储它的状态(当用户要离开activity时)之前调用commit(),将 fragment 弹出 back stack : popBackStack():将back stack中最后一次的fragment转换弹出,并且可以将 transaction 存进由activity管理的back stack中,需要调用Activity中的getFragmentManager()方法...
standard和singleTop是一组, 这两种模式标记的activity可以有多个实例(被初始化多次), 这些实例可以属于任何task, 并且可以被放在activity stack中的任何位置. 通常情况下,这两种模式标记的activity会被启动到调用startActivity()的那个task里, 除非Intent对象包含了FLAG_ACTIVITY_NEW_TASK这个标记, 则会启动一个新的task.,系统在启动一个activity的时候,如果发现它的launchMode是singleInstance,就会启动一个新的task,因为这种activity不会跟别人共用task. 所以和singleTask不同, singleInstance不需要特殊指定taskAffinity.,在singleInstance中启动的activity也不会跟它放在同一个task里, 根据要启动的activity的taskAffinity选择,可能在其他已有的task里,也可能开启新的task, 总之不是在singleInstance的task里.,在启动一个singleTask的activity实例时, 如果系统中已经存在这样一个实例, 将会把这个实例调度到task栈顶, 并清除它的task中栈上方的所有activities.,系统在启动一个activity的时候,发现它的launchMode是singleTask, 并不能保证就会真的开启一个新的task, 还会检查activity的taskAffinity属性.,如果Activity的taskAffinity属性没有被设置, activity会继承application的这个属性. 对于application来说, 默认的affinity的名字就是manifest元素指定的包名.,启动模式为singleTask的activity永远在它的task的根部, 同时, 其他的activities (launch mode为standard和singleTop) 可以被启动到这个task中.,但是,如果目标task中已经有一个这个singleTop的activity的实例,并且它是在栈顶,则这个已经存在的实例将接受这个新的intent( onNewIntent() 方法被调用), 新的实例不会被创建.,一个launch mode为singleInstance的activity, 不允许其他的activity在它的task中, 它自己是这个task中唯一的activity. 如果它启动另一个activity, 那个新的activity会被分配到一个不同的task中去, 就好像intent中含有FLAG_ACTIVITY_NEW_TASK Flag一样.,每次有一个新的Intent对象来启动standard activity时, 这个activity的一个新的实例就会被创建,来处理这个intent,也即每一个activity实例处理一个intent....
这样才能使得manifest文件与intent传递信息“匹配”成功,那么在Intent方法中需要使用如下addCategory方法进行说明:,注意:若category采用自定义的方式在manifest文件中注册,并存在两种方式:显式Intent和隐式Intent:,就可以得到与显式intent相同的Activity切换效果,隐式Intent的主要部分并非在class文件中,Intent的这个构造方法将action作为参数,在代码中使用隐式intent时,Intent的两个参数用来指示出发的Activity和将要启动的Activity,将intent传入该方法...
Fragment.onCreat(Bundle) 是public 方法, 因为需要被托管fragment的任何activity调用,public void onCreate(Bundle savedInstanceState) {,public void onCreate(Bundle savedInstanceState) {,在Fragment.onCreate(Bundle)中, 并没有生成fragment的视图, 虽然onCreate(Bundle)方法配置了fragment变量, 但创建和配置fragment视图是通过下面的onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)完成的.,public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {,public class SMSBombFragment extends Fragment {,第二种方法可以在运行时候控制fragment的方法, 我们可以决定何时将fragment添加到activity中以及随后完成具体任务; 也可以移除fragment, 用其他fragment代替当前fragment,Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);,protected void onCreate(Bundle savedInstanceState) {,2 在activity代码中添加 fragment , 用activity托管fragment...
【android刷新activity】推荐阅读【android刷新activity】相关问答【android刷新activity】推荐问答【android刷新activity】推荐搜索
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动

我要回帖

更多关于 activitystack 的文章

 

随机推荐