我爱编程

Activity

2018-06-11  本文已影响0人  LazyerRookie

一、Activity的四种状态

二、activity的生命周期

image.png
https://www.jianshu.com/p/f9da7ecded20?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo

Activity启动–>onCreate()–>onStart()–>onResume()

点击home键回到桌面–>onPause()–>onStop()

再次回到原Activity时–>onRestart()–>onStart()–>onResume()

退出当前Activity时–>onPause()–>onStop()–>onDestroy()

onCreate():
 表示Activity正在被创建,这是Activity生命周期的第一个方法。通常我们程序员要在此函数中做初始化的工作,比如:绑定布局,控件,初始化数据等。

onStart():
 表示Activity正在被启动,这时候的Activity已经被创建好了,完全过了准备阶段,但是没有出现在前台,需要执行onResume()函数才可以进入到前台与用户进行交互。

onResume():
 表示Activitiy已经可见了,并且Activity处于运行状态,也就是Activity不止出现在了前台,而且还可以让用户点击,滑动等等操作与它进行交互。

onPause():
 表示Activity正在暂停,大多数情况下,Activity执行完onPause()函数后会继续执行onStop()函数,造成这种函数调用的原因是当前的Activity启动了另外一个Activity或者回切到上一个Activity。还有一种情况就是onPause()函数被单独执行了,并没有附带执行onStop()方法,造成这种函数调用的原因很简单,就是当前Activity里启动了类似于对话框的东东。

onStop():
 表示Activity即将停止,我们程序员应该在此函数中做一些不那么耗时的轻量级回收操作。

onRestart():
 表示Activity正在重新启动。一般情况下,一个存在于后台不可见的Activity变为可见状态,都会去执行onRestart()函数,然后会继续执行onStart()函数,onResume()函数出现在前台并且处于运行状态。

onDestory():
 表示Activity要被销毁了。这是Activity生命中的最后一个阶段,我们可以在onDestory()函数中做一些回收工作和资源释放等,比如:广播接收器的注销等。

三、进程的优先级

前台>可见>服务>后台>空

前台:与当前用户正在交互的Activity所在的进程。

可见:Activity可见但是没有在前台所在的进程。

服务:Activity在后台开启了Service服务所在的进程。

后台:Activity完全处于后台所在的进程。

空:没有任何Activity存在的进程,优先级也是最低的。

四、任务栈

任务栈与Activity的启动模式密不可分,它是用来存储Activity实例的一种数据结构,Activity的跳转以及回跳都与这个任务栈有关。详情请看下面的Activity的启动模式。

五、Activity的启动模式

1.Activity为什么需要启动模式?

我们都知道启动一个Activity后,这个Activity实例就会被放入任务栈中,当点击返回键的时候,位于任务栈顶层的Activity就会被清理出去,当任务栈中不存在任何Activity实例后,系统就回去回收这个任务栈,也就是程序退出了。这只是对任务栈的基本认识,深入学习,笔者会在之后文章中提到。那么问题来了,既然每次启动一个Activity就会把对应的要启动的Activity的实例放入任务栈中,假如这个Activity会被频繁启动,那岂不是会生成很多这个Activity的实例吗?对内存而言这可不是什么好事,明明可以一个Activity实例就可以应付所有的启动需求,为什么要频繁生成新的Activity实例呢?杜绝这种内存的浪费行为,所以Activity的启动模式就被创造出来去解决上面所描述的问题。

2.Avtivity的启动模式有哪些?

Activity的启动模式有4种,分别是:standard,singleTop,singleTask和singleInstance。

3.如何为活动设置启动模式?

在AndroidManifest.xml文件当注册活动的代码中去指定

<activity android:name=".MainActivity"
     android:label="@string/app_name"
     android:launchMode="singleInstance">
     <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>

六、scheme跳转协议

Android中的scheme是一种页面内跳转协议,通过自定义scheme协议,可以非常方便的跳转到app中的各个页面,通过scheme协议,服务器可以定制化告诉app跳转到哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转到相应页面等等。主要用于以下几种场景:

URL scheme的作用

客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如车辆详情页、订单详情页、消息通知页、促销广告页等等。也可以执行某些指定动作,如订单支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。

上一篇下一篇

猜你喜欢

热点阅读