Activity

<1>Activity生命周期

onCreate() 正在创建,初始化界面、初始化数据

onStart()正在启动,可见但不在前台无法和用户进行交互

onResume()获取焦点,可见并在前台

onPause()失去焦点,不可见,可做数据存储、停止动画

onStop()即将停止,可做取消网络连接、注销广播接收器

onDestroy()即将销毁,资源释放、回收

onRestart()重新启动,不可见之后重新可见

<2>onStart()和onResumt/onPause()和onStop()的区别?

onStart()和onStop()是从Activity是否可见这个角度调用的,onResume()和onPause()是从Activity是否显示在前台这个角度来回调的,在实际使用没其他明显的区别。

<3>Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个对话框Activity呢?

Activity A启动另一个Activity B会回调的方法:

Activity A的onPause()-->Activity B的onCreate()、onStart()、onResume()-->Activity A的onStop();

如果Activity B是完全透明或者对话框Activity,则最后不会调用Activity A的onStop();

<4>谈谈onSaveInstanceState()方法?何时会调用?

当非人为终止Activity时,比如系统配置发生改变时导致Activity被杀死并重新创建、资源内存不足导致低优先级的Activity被杀死,会调用onSaveInstanceState()来保存状态,该方法调用在onStop()之前,但和onPause()没有时序关系。

<5>onSaveInstanceState()与onPause()的区别?

onSaveInstanceState()适用于对临时性状态的保存,而onPause()适用于对数据的持久化保存。

<6>优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?

优先级低的Activity在内存不足被回收后重新打开会引发Activity重建。Activity被重新创建时会调用onRestoreInstanceState()(该方法在onStart()之后),并将onSaveInstanceState()保存的Bundle对象作为参数传到onRestoreInstanceState()与onCreate()方法。因此可以通过onRestoreInstanceState(Bundle bundle)和onCreate(Bundle bundle)来判断Activity是否被重建,并取出数据进行恢复。

<7>横竖屏切换时候Activity的生命周期

如果没有在清单文件中配置Activity的android:configChanges属性,切换横竖屏会重新调用Activity的各个生命周期,默认首先销毁当前的Activity然后再重新加载

如果在清单文件中配置Activity的android:configChanges=''orientation | keyboardHidden | screenSize“切换横竖屏不会重新加载Activity的各个生命周期但会执行onConfigurationChanged()方法。

当屏幕旋转时,如何阻止界面销毁重建,写到清单文件activity节点属性:
1.把方向写死

android:screenOrientation="portrait"

android:screenOrientation="landscape"

2.配置对系统变化不敏感(方向|屏幕尺寸|键盘隐藏)

android:configChanges="orientation | screenSize | keyboardHidden"

<8>Activity启动模式

standard标准模式:每次启动一个Activity就会创建一个新的实例

singleTop栈顶复用模式:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调onNewIntent(intent)方法

singleTask栈内复用模式:只要该Activity在一个任务栈中存在,都不会重新创建,并回调onNewIntent(intent)方法,如果不存在,系统就会先寻找需要的栈,如果不存在该栈,就创建一个任务栈,并把该Activity放进去,如果存在,就会创建到已经存在的栈中

singleInstance单一实例模式:具有此模式的Activity只能单独位于一个任务栈中,且此任务栈只有唯一一个实例

<9>onNewIntent()调用时机

启动模式为singleTop或singleTask的Activity在以下情况会回调onNewIntent():

1.singleTop:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调onNewIntent(intent)方法

2.singleTask:只要该Activity在一个任务栈中存在,都不会重新创建,并回调onNewIntent(intent)方法

<10>Activity启动模式的标记位

FLAG_ACTIVITY_SINGLE_TOP:对应singleTop模式

FLAG_ACTIVITY_SINGLE_TASK:对应singleTask模式

<11>如何启动其他应用的Activity

在保证有权限访问的情况下,通过隐式Intent进行目标Activity的IntentFilter匹配:

1.一个Intent只有同时匹配某一个Activity的intent-filter中的action、categroy、data才算完全匹配,才能启动该Activity

2.一个Activity可以有多个intent-filter,一个intent只要成功匹配任意一组intent-filter,就可以启动该Activity。

<12>Activity的启动过程

调用startActivity()后经过重重方法会转移到ActivityManagerService的startActivity(),并通过一个IPC回到ActivityThread的内部类ApplicationThread中,并调用其scheduleLaunchActivity()将启动Activity的消息发送并交由Handler H处理。Handler H对消息的处理会调用handleLaunchActivity()-->performLaunchActivity()得以完成Activity对象的创建和启动。

<13>Activity变成一个窗口

设置Activity的style属性=”@android:style/Theme.Dialog"

<14>Activity如何退出

finish();

killProgress();

System.exit(0);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值