美文网首页
Android_03 Activity

Android_03 Activity

作者: MengkZhang | 来源:发表于2019-05-14 08:20 被阅读0次

Activity的官方API解释

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with [setContentView(View)]

详细信息参考官方API


API

Activity生命周期

    onCreate-----------当Activity第一次创建的时候执行
            onStart-----------当Activity对用户可见的时候执行
                    onResume--------当用户获取焦点Activity可以和用户交互的时候执行
                    onPause---------当用户失去焦点Activity不能喝用户交互的时候执行
            onStop-----------当Activity对用户不可见的时候执行
    onDestroy--------当Activity销毁的时候执行
Activity生命周期图

Activity四种启动模式

在这金三银四的时间里一个哥们忽然一本正经的问我Activity的启动模式和具体的应用模式;我也一想是啊,平是不太注意结果到了 关键的时刻卡壳了,感觉未雨绸缪一下,做个记录:

(一)、基本描述

\color{red}{standard:}标准模式:如果在mainfest中不设置就默认standard;standard就是新建一个Activity就在栈中新建一个activity实例;
\color{red}{singleTop}:栈顶复用模式:与standard相比栈顶复用可以有效减少activity重复创建对资源的消耗,但是这要根据具体情况而定,不能一概而论;
\color{red}{singleTask:}栈内单例模式,栈内只有一个activity实例,栈内已存activity实例,在其他activity中start这个activity,Android直接把这个实例上面其他activity实例踢出栈GC掉;
\color{red}{singleInstance :}堆内单例:整个手机操作系统里面只有一个实例存在就是内存单例;


  • 在singleTop、singleTask、singleInstance 中如果在应用内存在Activity实例,并且再次发生startActivity(Intent intent)回到Activity后,由于并不是重新创建Activity而是复用栈中的实例,因此Activity再获取焦点后并没调用onCreate、onStart,而是直接调用了\color{blue}{onNewIntent(Intent intent)}函数;

(二)、Activity四种启动模式常见使用场景

应用场景

(三)、Intent中标志位设置启动模式

在上文中的四种模式都是在mainfest的xml文件中进行配置的,GoogleAndroid团队同时提供另种级别更高的设置方式,即通过Intent.setFlags(int flags)设置启动模式;

  1. FLAG_ACTIVITY_CLEAR_TOP : 等同于mainfest中配置的singleTask,没啥好讲的;
  2. FLAG_ACTIVITY_SINGLE_TOP: 同样等同于mainfest中配置singleTop;
  3. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: 其对应在AndroidManifest中的属性为android:excludeFromRecents=“true”,当用户按了“最近任务列表”时候,该Task不会出现在最近任务列表中,可达到隐藏应用的目的。
  4. FLAG_ACTIVITY_NO_HISTORY: 对应在AndroidManifest中的属性为:android:noHistory=“true”,这个FLAG启动的Activity,一旦退出,它不会存在于栈中。
  5. FLAG_ACTIVITY_NEW_TASK: 这个属性需要在被start的目标Activity在AndroidManifest.xml文件配置taskAffinity的值【必须和startActivity发其者Activity的包名不一样,如果是跳转另一个App的话可以taskAffinity可以省略】,则会在新标记的Affinity所存在的taskAffinity中压入这个Activity。

  • 个人认为在上述Flag中FLAG_ACTIVITY_NEW_TASK是最为重要的一个flag,同时也需要注意的是网上有很多是瞎说的;而且也是个人唯一一个在实际开发中应用过的属性;先说说个人应用示例:
  • 1.在Service中启动Activity;
  • 2.App为系统Launcher时,跳转到微信无法退出时用到;

Activity开启页面后,当被开启的页面关闭后,把数据返回给调用者

1,跳转页面时,用这个方法


image.png

2,在被开启的页面上把数据返回给调用者的方法


image.png

3,当被开启的页面关闭后,调用者的onActivityResul方法立马执行
调用者获取关闭的页面返回的数据的方法


image.png

相关文章

网友评论

      本文标题:Android_03 Activity

      本文链接:https://www.haomeiwen.com/subject/xohjaqtx.html