概括内容主要包括:
1,生命周期;
2,启动方式;
3,scheme跳转协议
activity的定义:
安卓提供显示用户交互的接口,提供了一个界面供用户进行点击,各种滑动操作,这就是activity的意义。
1,activity的生命周期
1. activity的四种状态
2. activity生命周期分析
3. android进程优先级
1.1,activity的四种状态:
running / paused / stopped / killed
running:运行中,即活动状态下,进行操作,且activity处于activity栈顶
paused:失去焦点的状态:情况:被一个非全屏的activity或者全透明的activity覆盖
stopped:被一个activity完全覆盖时,会处于stopped状态,不再可见,内存或成员变量可能还在
Killed:失去交互能力,但是成员变量都还在,处于内存紧张时会被系统回收掉
1.2,activity的生命周期分析
1.2.1,activity的生命周期
生命周期图onCreate()
onStart():处于用户可见,但还没有进入前台显示,即用户还不能进行点击,滑动(未交互动)
onPause()
onResume()前台可见,用户可操作(交互),也可初始化资源
onRestart()
onStop()
onDestroy()
场景例子:
1,点击Home键回到主界面(activity不可见) -> onPause() -> onStop()
这里的onPause():activity处于可见,但是不可触摸的状态
这里的onStop():处于activity完全被覆盖的状态
2,当我们再次回到原来的activity时 -> onRestart() -> onStart() -> onResume()
表示正在重新由不可见到可见状态
3,当退出当前activity时 -> onPause() -> onStop() -> onDestroy()
1.3,进程优先级
进程优先级如下:
前台 / 可见 / 服务 / 后台 / 空
从左到右,优先级从高到低
前台进程:
1,处于前台与用户交互的activity;
2,在前台绑定的Service;
3,进程的BroadcastRecevier在执行onReceive()
可见进程:可见不可触
服务进程:后台开启的服务
正在运行已使用startService() 方法启动的服务且不属于和上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,但它们通常在「执行一些用户关心的操作」(例如,在后台播放音乐或从网络下载数据)。因此,除非内存不足以维护所有前台进程和可见进程同时运行,否则会让服务进程保持运行状态。
后台进程:场景描述:我们点击了Home键,前台可交互的activity,此时就变成了后台进程,会不会被kill,要看具体的内存情况,紧张就会被kill
空进程:
1,不属于前四种;
2,保持活跃;
3,随时被杀掉;
4,保持这个进程的原因是,它可以作为一个cache来提高下次启动组件的速度
空进程的定义:
不含任意活动应用组件的进程。保留这种进程的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。
2,activity的启动模式
standard:默认的启动模式,每点击一个就创建一个新的activity资源
singleTop:栈顶复用,即如果创建的activity是处于栈顶,则不会再创建,会复用,但是如果没有,就会再创建一个
使用场景:用于详情页,可以省去资源,因为你快速点击深层activity,会不断地创建实例,最后会容易引起内存资源不足导致闪退的现象。
singleTask:栈内复用,即如果activity任务栈中存在这个activity,就将它置于栈顶,然后把它上面的那些清除掉
使用场景:
另外,如果登陆页是app启动后的第一页,如下一样
<activity
android:name=".ui.activity.LoginWebActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果启动页配置了SingleTask,你点了home后再打开应用,显示的还会是启动页
如果启动页没有配置该模式,则点了home后再打开应用,显示的是上一次你出来的页面
由此它可以应用于安全级别较高的app的一些登录的使用场景中。
毕竟因为onCreate()不会再走了,所以就要走下面的。
以上两个启动模式可以用onNewIntent()方法进行回调和调整。
singleInstance:有且只有一个实例,独占一个任务栈
3,scheme跳转协议
意义:
是页面内跳转的协议,是一种非常好的实现机制。
通过定义自己的scheme协议,可以非常方便地跳转app中的各个页面;
通过scheme协议,服务器可以定制化告诉app跳转到哪个页面;
可以通过通知栏消息定制化跳转页面;
可以通过H5页面跳转页面
模式简介:
可以由A这个app -> BApp
可以指定从A acitivity - > B activity
关于URL,URI,Uri
URL:通用的资源定位符,用于定位,读写资源
URI:通用的资源标识符,只能进行定位资源
Uri:结构,在Android中使用Uri,每种资源,图,video,都可用Uri
URI>URL
模拟点击链接中的参数(使用场景在别的APP中调起别的APP)
实例:
A应用部分
/**
*(1)在manifest配置文件中配置了scheme参数
*(2)网络端获取url
*(3)跳转
*/
Stringurl="scheme://mtime/goodsDetail?goodsId=10011003";
Intentintent=newIntent(Intent.ACTION_VIEW,
Uri.parse(url));
startActivity(intent);
B应用部分
android:name=".schemeActivity"
android:label="@string/app_name">
<!--要想在别的App上能成功调起App,必须添加intent过滤器-->
<!--协议部分,随便设置-->
<intent-filter>
<!--协议部分,随便设置-->
<data android:scheme="scheme"android:host="mtime"android:path="/goodsDetail"/>
<!--下面这几行也必须得设置-->
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
B应用的Activity中
Protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_shceme);
schemeTv=(TextView)findViewById(R.id.text1);
Uridata=getIntent().getData();
Log.i(TAG,"host="+data.getHost()+"path="+data.getPath()+"query="+data.getQuery());
Stringparam=data.getQueryParameter("goodsId");
schemeTv.setText("获取的参数为:"+param);
}
效果就是:
点击跳转
A应用的界面,点击helloword跳转 跳转到B应用界面跳转到另一个应用的页面
A应用 ---->(跳转)---> B应用
A应用:网络端获取url,用Intent跳转。
B应用:配置文件中配置scheme参数
网友评论