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

Activity复习

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

1. Activity生命周期

  1. Activity的四种状态

    • running: 活动状态,可以交互
    • paused: 失去焦点,或者被盖住的情况下,无法进行交互
    • stopped: Activity被完全覆盖的情况
    • killed: Activity被系统回收。
  2. 生命周期

    这里写图片描述

    • oncreate:Activity被创建
    • onStart:Activity被启动,可见,不可交互
    • onResume:Activity可进行交互
    • onPause:Activity停止状态,可见,不可交互
    • onStop:Activity被停止,被覆盖,不可见
    • onRestart:Activity被重启,从不可见到可见
    • onDestory:Activity被销毁,可以进行资源回收
    1. Activity启动:oncreate()->onStart()->onResume()
    2. 点击Home键:onPause()->onStop()
    3. 再次回到Activity:onRestart()->onStart()->onResume()
    4. 退出Activity:onPause->onStop()->onDestory()
  3. 进程优先级

    1. 前台进程:前台交互的Activity或者前台Activity绑定的Service
    2. 可见进程:不可交互的进程
    3. 服务进程:后台的Service进程
    4. 后台进程:从前台切换到后台运行的进程
    5. 空进程:没有活跃的组件,随时可被回收

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> 
  1. 应用内跳转和app间跳转

    1. 构建intent,跳转

      Uri uri = Uri.parse("demo://dudu:4002/test?name=张三&password=12345");
      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
      startActivity(intent);
      
    2. 接收相关的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");
      }
      
  2. url启动app

    <a href="demo://dudu:4002/test?name=张三&password=12345">test</a>
    
  3. js跳转页面

    需要重写WebView,拦截url进行Intent的拼装,跳转。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值