Activity Service BoradCast ContentProvider
这个就不用再说了吧
- Intent
- 静态变量
- 全局变量 及Application
- Android系统剪切板
- 本地化存储方式(SharedPreference、SQLite、File)
- Andorid组件(Broadcast)
- EventBus
横竖切换 ---根据screenSize的值
跳转到下一个Actitity
稍微记得不同版本生命周期不一样 (6.0--7.0--8.0) 这边要看configChanges的设置 设置android:configChanges="orientation|keyboardHidden|screenSize" 则都不会调用Activity的其他生命周期方法,只会调用onConfigurationChanged方法。
如果设置了 orientation screenSize 生命周期 竖(横)屏启动:onCreate -->onStart-->onResume
- 切换横(竖)屏:onConfigurationChanged (Android 6.0 Android 7.0 Android 8.0)
如果没设置
- 正常页面切换 -> onPause ->onSaveInstanceState ->onStop ->onDestroy -> onCreate ->onStart -> onRestoreInstanceState ->onResume
onPause -> onSaveInstanceState -> onStop -> onRestart -> onstart -> onResume
onPause ->onSaveInstanceState(回调确实有) ->onStop ->onRestart ->onStart->onResume
当前Activity -> onPause ->2onCreate->2onStart->2onResume ->1onStop 确保有一个在前台页面
小米6.0 不会变化。
-
1.standard 标准模式,这也是系统默认启动模式
-
2.singleTop 栈顶复用模式:如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,但是会调用 onPause->onNewIntent->onResume 应用场景:登录页面、推送通知栏
-
3.singleTask
栈内复用模式:这是一种单实例模式,只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,若存在此Activity会把栈前的Activity销毁 例:对于一个任务栈,存在ADBC,在重新启动D,则相应栈会变成AD 应用场景:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面 -
4.singleInstance 单实例模式,,它除了具有SingleTask模式的所有特性外,还加强了一点,具有此种模式的Activity只能单独位于一个任务栈中,换句话说,当A启动后, 系统会为它新建一个新的任务栈,然后A独自在这个新的任务栈中。 应用场景:系统Launcher、锁屏键、来电显示等系统应用
任务栈 用TaskAffinity,默认任务栈的名字为应用的包名
异常状况下会调用 对应的onSaveInstanceState() 和onRestoreInstanceState()
-
什么时候调用onSaveInstanceState() 1.屏幕旋转重建会调用onSaveInstanceState() 2.启动另一个activity: 当前activity在离开前会调用onSaveInstanceState() 3.按Home键的情形和启动另一个activity一样, 当前activity在离开前会onSaveInstanceState()
-
什么时候调用onRestoreInstanceState() 1.屏幕旋转重建会调用onRestoreInstanceState() 2.启动另一个activity,返回时如果因为被系统杀死需要重建, 则会从onCreate()重新开始生命周期, 调用onRestoreInstanceState() 3.按Home键的情形和启动另一个activity一样,用户再次点击应用图标返回时, 如果重建发生, 则会调用onCreate()和onRestoreInstanceState() (注:2、3其实都是Activity异常销毁)
具体参考FragmentActivity、NameFragment、NameContentFragment3个类 1.使用接口 2.直接在一个Fragment中调用另外一个Fragment中的方法 3.使用广播 4.Fragment直接调用Activity中的public方法
-
使用context.startService() 启动Service 其生命周期为context.startService() ->onCreate()- >onStart()->Service running-->(如果调用context.stopService() )->onDestroy() ->Service shut down
-
对于bindService()启动Service会经历 context.bindService()->onCreate()->onBind()->Service running-->onUnbind() -> onDestroy() ->Service stop
-
- startService 通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。 多次startService不会重复执行onCreate回调,但每次都会执行onStartCommand回调。
2.bindService() bindService启动服务特点: 1.bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。 2.client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。 3.bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用Context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。