美文网首页
Android四大组件之Activity详解

Android四大组件之Activity详解

作者: 门心叼龙 | 来源:发表于2019-04-16 19:23 被阅读0次

1. Activity与Servlet的异同?

相同点:
  • 1.1 Activity、Servlet的职责都是向用户呈现界面

  • 1.2 Activity、Servlet的实例都是系统创建,方法都由系统进行回调

  • 1.3 Activity、Servlet都有自己的生命周期

  • 1.4 Actiivty、Servlet开发出来之后都需要进行配置

    区别:

  • 2.1 Activity是窗口的容器,而Servlet生产的是窗口要显示的内容

  • 2.2 Activity的跳转主要是由Intent来控制的,Servlet的跳转主要是由URL地址来实现的

2. Activity的生命周期?

  • onCreate():当第一次进入某一个Activity的时候会调用该方法
  • onStart():当Activity被我们看见的时候就调用该方法
  • onRestart():当一个Activiy再次被打开的时候就会调用该方法
  • onResume():在Activity能获得用户焦点的时候就调用该方法
  • onPause():当Activity失去用户焦点的时候会调用该方法
  • onStop():当Activity完全被遮挡住的时候就会调用该方法
  • onDestory():当Activity被销毁的时候回调用该方法

3. Activity之间的跳转所经历生命周期?

  • 3.1 FirstActivity打开:

     FirstActivity--->onCreate
     FirstActivity--->onStart
     FirstActivity--->onResume
    
  • 3.2 FirstActivity跳转到SecondActivity

    FirstActivity--->onPause
    SecondActivity--->onCreate
    SecondActivity--->onStart
    SecondActivity--->onResume
    FirstActivity--->onStop
    
  • 3.3 SecondActivity返回到FirstActivity

    SecondActivity--->onPause
    FirstActivity--->onReStart
    FirstActivity--->onStart
    FirstActivity--->onResume
    SecondActivity--->onStop
    SecondActivity--->onDestroy
    

4. Activity之间跳转的本质?

 Activity之间的跳转切换实际就是在后台进行的一个压栈和弹栈的过程,手机屏幕上始终显示的是堆栈中最顶部的那个Activity,弹栈就意味着Activity会被销毁
  • 4.1 应用程序启动之后,运行第一个Activity之后,该Activity对象被压入到stack当中
  • 4.2 点击按钮后启动第二个Activity,该Actitivy对象被压入到Stack当中
  • 4.3 点击Back按钮,这时第二个Activity对象堆栈当中弹出
  • 4.4 在再次点击Back按钮之后,显示FirystActivity被从栈当中弹出来

5. Activity的四种启动模式有哪几种?

  • 5.1 standard:多例

    模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中
    
  • 5.2 singleTop:栈顶单例

    如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
    浏览器添加书签的功能
    发送短信重复一百下,避免重复界面
    
  • 5.3 singleTask:单栈单例【同一个应用共享一个Activity】

    如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
    浏览器,节约内存空间

  • 5.4 singleInstance:多栈单例【多个应用共享一个Activity】

    在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
    有道词典,不管在哪个应用程序里面打开,只保证有一个相同的activity
    用户来电
    

6.SingleTask与SingleInstace之间的区别?

SingleTask:共享任务栈,整个任务栈只有一个实例,适用于应用的入口界面
SingleInstance:独享任务栈,整个系统只有一个实例,适用于需要和应用分离开的页面
android:taskAffinity=""
android:launchMode="singleTask"
结果:可以创建一个新的任务栈

android:taskAffinity=""
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
结果:可以创建一个新的任务栈

结论:两者的作用是等价的
注意事项:

  • 6.1 startActivityForResult启动的目标Activity的启动模式不能为SingleTask,否则有些机型会导致onActivityResult不回调
  • 6.2 SingleTop模式的activity在返回的时候设置mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)也可以达到SingleTast模式的效果,回调会走onNewInent方法
Intent mIntent = new Intent();
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mIntent);
image.gif
  • 6.3 Activity的android:configChanges="orientation|keyboardHidden|screenSize"横竖屏切换不明感,可在onConfigurationChanged方法里作一些UI适配工作

注意了:orientation|screenSize两个设置缺一不可

7. 怎么通过Activity获取res文件下的资源

InputStream is = getResources().getAssets().open("car_move.jpg");
InputStream is = getResources().openRawResource(R.raw.simulated);

相关文章

网友评论

      本文标题:Android四大组件之Activity详解

      本文链接:https://www.haomeiwen.com/subject/bmeiwqtx.html