您的位置:首页 > 职场人生

Android面向面试复习----Activity复习

2018-02-11 17:48 405 查看

Activity复习

Activity是我们学习Android的时候的第一个组件,它提供界面用户可以进行滑动、点击等交互。使用上很简单,但是有一些相关的知识也许需要很好的掌握才能用好。

1. Activity生命周期

Activity的四种状态

running: 活动状态,可以交互

paused: 失去焦点,或者被盖住的情况下,无法进行交互

stopped: Activity被完全覆盖的情况

killed: Activity被系统回收。

生命周期



oncreate:Activity被创建

onStart:Activity被启动,可见,不可交互

onResume:Activity可进行交互

onPause:Activity停止状态,可见,不可交互

onStop:Activity被停止,被覆盖,不可见

onRestart:Activity被重启,从不可见到可见

onDestory:Activity被销毁,可以进行资源回收

Activity启动:oncreate()->onStart()->onResume()

点击Home键:onPause()->onStop()

再次回到Activity:onRestart()->onStart()->onResume()

退出Activity:onPause->onStop()->onDestory()

进程优先级

前台进程:前台交互的Activity或者前台Activity绑定的Service

可见进程:不可交互的进程

服务进程:后台的Service进程

后台进程:从前台切换到后台运行的进程

空进程:没有活跃的组件,随时可被回收

2. Android任务栈

Activity是存储在任务栈中的,它的特点是先进后出。这块跟Activity的启动模式相关比较紧密,同时,app在安全退出时,也需要遍历所有的Activity,都finish后再退出。

3. Activity启动模式

standed:标准模式,每次启动Activity都会创建一个实例,并加入任务栈中,不会复用,比较消耗资源

singleTop:栈顶复用模式,启动Activity的时候,会去判断,任务栈的栈顶是否是该Activity的实例,那么就不会再次创建,直接复用

singleTask:栈内复用模式,启动Activity的时候,会去判断,任务栈中是否存在该Activity的实例,如果存在,它会将该实例上面部分所有activity实例出栈,把当前实例置于栈顶。

singleInstance:在使用的过程中会有一些问题,很少使用,不多介绍。(Ps:在使用时出现过bug)

4. scheme跳转协议

在需要能够被打开的Activity中添加以下样例的intent-filter

<intent-filter>
    <!--下面这几个必须要设置-->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
    <!--协议部分-->
android:scheme="demo" android:host="dudu" android:path="/test" android:port="4002"
</intent-filter>


应用内跳转和app间跳转

构建intent,跳转

Uri uri = Uri.parse("demo://dudu:4002/test?name=张三&password=12345");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);


接收相关的uri和schme

需要结合启动模式,在onCreate或者newIntent中处理。

Intent intent = getIntent();
String scheme = intent.getScheme();
String dataString = intent.getDataString();
Uri uri = intent.getData();
System.out.println("scheme:" + scheme);
if (uri != null) {
//完整的url信息
String url = uri.toString();
//scheme部分
String schemes = uri.getScheme();
//host部分
String host = uri.getHost();
//port部分
int port = uri.getPort();
//访问路径
String path = uri.getPath();
//编码路径
String path1 = uri.getEncodedPath();
//query部分
String queryString = uri.getQuery();
//获取参数值
String name = uri.getQueryParameter("name");
String password = uri.getQueryParameter("password");
}


url启动app

<a href="demo://dudu:4002/test?name=张三&password=12345">test</a>


js跳转页面

需要重写WebView,拦截url进行Intent的拼装,跳转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: