1 Activity相关

Activity生命周期
Android任务栈
Activity启动模式
scheme跳转协议(特别注意这个)

一、 Activity生命周期

1、什么是Activity?
Activity是Android提供的与用户进行交互的接口,它提供了一个页面,让用户进行点击或者滑动,该界面即为Activity.
总结【Android提供的与用户进行交互的页面】

2、Activity的4种状态
/running 位于栈顶
/paused 失去焦点,或者被一个非全屏的Activity覆盖,或被一个透明的Activity覆盖,并未必销毁
/stopped 不再可见,被另外一个Activity完全覆盖,内存不紧张,变量等信息都还在
/killed 由于内存紧张被销毁
总结【Running可交互状态】【Paused暂停状态,可见但不可点击】【Stopped停止,被完全覆盖,仍存在于后台】【Destroyed销毁,完全销毁】

3、Activity生命周期分析

Activity启动-->onCreate()-->onStart()-->onResume()
onCreate:被创建的时候调用;可以做一些初始化操作,数据加载,图片加载等
onStart:可见,但不能交互
onResume:可见,可交互;可以初始化一些资源

点击Home健回到主页面(Activity不可见)-->onPause()-->onStop()
onPause:整个Activity停止,可见,但不能交互
onStop:已经被停止,或完全不可见,处于后台运行

再次回到原Activity-->onRestart()-->onStart()-->onResume()
onRestart:正在重新启动,由不可见状态正在转变为可见状态

退出当前Activity时-->onPause()-->onStop()-->onDestory()
onDestory:正在被销毁,可以做一些资源回收工作

4、生命周期图:


图片1.png

5 、Android进程优先级

前台、可见、服务、后台、空】
前台:
1)该进程持有一个,处于前台,正在和用户进行交互的Activity;
2)该进程持有一个,和前台Activity进行绑定Service;
3)该进程持有一个前台运行模式的Service(也就是这个Service调用了startForegroud()方法)。
4)该进程持有一个正在执行生命周期方法(onCreate()、onStart()、onDestroy()等)的Service。
5)该进程持有一个正在执行onReceive()方法的BroadcastReceiver。
可见:有个Activity在前台可见,但是不可操作,其所属的进程;或该进程持有一个与可见(或者前台)Activity绑定的Service;
服务:除符合前台进程和可见进程条件的Service
后台:在后台运行的,或者后台运行的Service所属的进程
空:没有活跃的组件,可以被随时回收的进行

6、Android任务栈
1) android任务栈又称为Task,它是一个【栈结构】,具有【后进先出】的特性,用于存放我们的Activity组件。
2) 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈【包含了一个activity的集合】, android系统可以通过Task有序地管理每个activity,并决定哪个Activity与用户进行交互:【只有在任务栈栈顶的activity才可以跟用户进行交互】。
3) 在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。
4)需要注意的是,一个App中可能不止一个任务栈,某些特殊情况下,单独一个Actvity可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
【一个app种可以有多个任务栈,一个Activity也可以独占一个任务栈,Android中用一个任务栈来存储Activity集合或队列】


2任务栈.JPG

7、Activity启动模式
1)standard 每次都新建一个Activity
2)singletop 栈顶复用,不是栈顶的话还是会创建
3)singletask 栈内复用
4)singleinstance 整个系统中只有一个实例,且独享一个任务栈
启动模式使用方式:
1)在XML配置文件中配置
2)在Intent中addFlags
https://blog.csdn.net/javazejian/article/details/52072131

8、scheme跳转协议
Android中的Scheme是一种页面内跳转协议,通过自定义Scheme协议,可以跳转到app中的任何页面。
1)服务器可以定制化跳转app页面
2)app可以通过Scheme跳转到另一个app页面
3)可以通过h5页面跳转app原生页面

URL Scheme 的格式
客户端自定义的 URL 作为从一个应用调用另一个的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。这跟我们常见的网页内容 URL 格式一样。
一个普通的 URL 分为几个部分,scheme、host、port、relativePath、query、fragment
URL语法:URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
URL的一般语法格式为:
(带方括号[]的为可选项):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
【protocol(协议)】
【hostname(主机名)】
【port(端口号)】
【path(路径)】
【parameters(参数)】
【query(查询)】
【fragment(信息片断)】

使用:++++++++++++++++++++++++++++

在AndroidManifest.xml中设置了data属性,data代表数据源,是xml中最复杂的标签,
因为不同的Activity支持的数据来源和类型多种多样,所以需要通过详细的data标签信息来指明。
Data的语法如下:


获取Scheme跳转的参数:
1)通过intent.getData();获取data
Uri uri = getIntent().getData();

  1. 通过uri.getScheme();等获取数据

原生调用:

 Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck"));
 startActivity(intent1);

html调用:

打开商品详情

判断某个Scheme是否有效:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck"));
List activities = getPackageManager().queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}

你可能感兴趣的:(1 Activity相关)