不管应用程序的业务逻辑如何,都可能会因为运行的系统或平台问题而导致出现某些奇怪的崩溃现象。...当应用程序进程被终止的时候,所有的单例对象和临时数据都同时丢失了,而现在如果你返回你的应用程序,系统会创建一个新的进程,而你的应用程序会从你退出时候的 Activity 栈顶执行 Resume 函数恢复该...解决方案 2: 现在,你肯定已经注意到可以利用“包”对象保存和访问数据。与前面的示例中的操作类似,将每个 Activity / Fragment 中所有必要的信息保存下来。...(outState: Bundle) { super.onSaveInstanceState(outState) outState.putParcelableArrayList...我们会让应用程序检查 onViewCreated() 函数中捆绑包中的数据是否可用,如果不可用,则会通过访问 ViewModel 的方法获取数据。
, 并使用 AssetManager 加载插件包资源的模块 ; 本博客中开发开发本地的 Activity 桩 , 即空壳 Activity , 用于持有插件界面组件 , 并在生命周期中回调插件界面 Activity...插件包 apk 中的 ProxyActivity , 则不能使用应用本身的类加载器 , 插件管理器 PluginManager 中的类加载器已经加载了插件包 apk 中的 dex 文件 , 因此可以获取到...null, context.getClassLoader() // DexClassLoader 加载器的父类加载器 ); 在支持 插件化的工程中 , " 宿主 " 模块 和...Activity 类对象 ; // 使用类加载器加载插件中的界面组件 ClassoutState) { super.onSaveInstanceState(outState); pluginActivity.onSaveInstanceState
最先找到的文档就是通过 Activity 的 onSaveInstanceState 和 onRestoreInstanceState 方法来保存用户状态, 虽然最终测试发现这种方法不是肯靠谱, 还是记录下来了...实例参数, 通过重写这个方法, 可以保存 Activity 的状态, 示例代码如下: protected override void OnSaveInstanceState(Bundle outState...) { base.OnSaveInstanceState(outState); outState.PutInt("main_activity_click_count", _count);...} 经过测试, 这种方法最大的缺点就是不靠谱 , 因为 onSaveInstanceState 和 onResotreInstanceState 不是每次都能被系统调用, 因为应用可能在调用 onRestoreInstanceState...2、 使用 SharedPreference 保存状态 Android 推荐在 onPause 方法中使用 SharedPreference 保存状态是比较可靠的, 因为 SharedPreference
outState) { super.onSaveInstanceState(outState); Log.d("roamer", "onSaveInstanceState"); ...尽管系统帮我们实现了UI组建的自动保存和恢复,但是有时候也需要去保存和恢复一些其他的成员变量。...在这种情况下,记得重写onSaveInstanceState()和onRestoreInstanceState()方法是,记得带上super方法的实现,因为那里就是系统UI组件自动保存和恢复的默认实现。...(Bundle outState){ super.onSaveInstanceState(outState); String content = etCon.getText(..., "")); } } 状态保存主要的使用除了横竖屏切换,在 fragment替换的时候可以用来解决花屏的问题
问题2: 如果我们从A 这个Activity ,跳到了 B 这个Activity,那二个Activity的(onStart - onStop)和(onResume - onPause)又分别如何执行。...我们看脑图就知道,在异常生命周期中,我们会额外执行二个方法:onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState...(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState...,那说明关键点就在super.onSaveInstanceState(outState);和super.onRestoreInstanceState(savedInstanceState);这二句话了。...一定是匹配规则,同时其实还有另外一个category。
上篇文章提到,虽然viewModel要比onSaveInstanceState简单,但是viewModel只能在屏幕旋转和语言切换后(即配置变更时)的页面重建维持数据,当页面意外销毁时数据无法恢复(viewModel...也会重建),而这点onSaveInstanceState可以做到。...(Bundle outState) { super.onSaveInstanceState(outState); //在页面被意外销毁时,存储act的创建时间...outState.putString("test", mTime); } } 在onCreate方法中,新加了savedInstanceState的取值操作,同时重写了onSaveInstanceState...方法存储时间,那么如何模拟页面被意外销毁呢,可以在开发者选项中选中不保留活动-用户离开后即销毁每个活动,开启后,运行app,然后按home键引起页面意外销毁,然后回到页面,查看日志: ?
问题2: 如果我们从A 这个Activity ,跳到了 B 这个Activity,那二个Activity的(onStart - onStop)和(onResume - onPause)又分别如何执行。...异常生命周期 我们看脑图就知道,在异常生命周期中,我们会额外执行二个方法:onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle...(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState...super.onSaveInstanceState(outState);和super.onRestoreInstanceState(savedInstanceState);这二句话了。...一定是匹配规则,同时其实还有另外一个category。
onSaveInstanceState与OnRestoreInstance难道不是配对使用的?...(Bundle outState) { super.onSaveInstanceState(outState); Parcelable p = mFragments.saveAllState...针对窗口保存了什么: protected void onSaveInstanceState(Bundle outState) { outState.putBundle(WINDOW_HIERARCHY_TAG...如果是ViewPager+FragmentAdapter的使用方式,就同时涉及FragmentActivity的恢复、也牵扯到Viewpager的恢复,其实FragmentAdapter也同样针对后台杀死做了一些兼容...如何处理杀死及恢复的文章。
Activity状态保存的基本使用 学习Activity的生命周期,我们知道,当Activity进入到paused或者stopped状态后,这个Activity的状态仍然保存着。...@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState...); Log.d("roamer", "onSaveInstanceState"); } @Override protected void onCreate(Bundle savedInstanceState...(savedInstanceState); Log.d("roamer", "onRestoreInstanceState"); } 通过onSaveInstanceState()方法传递进来的...在这种情况下,记得重写onSaveInstanceState()和onRestoreInstanceState()方法是,记得带上super方法的实现,因为那里就是系统UI组件自动保存和恢复的默认实现。
废话2 两三年前只有少数o2o软件、导航、交通软件会集成LBS,而现在是个软件都要集成LBS,所以作为开发的我们终于不能忍了,来搞搞LBS吧,目前用的最多的是百度地图和高德地图,百度地图定位精准、路线规划科学...2、导入jar、so包 去官网下载最新的开发包,或者下载官方demo,把它们的包拷贝出来。...开发包分两部分,jar包和so库,jar包直接全部拷贝到app/libs中,如下图: ?...(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(...(8)小效果 最后我们来添加一个小效果:点击屏幕,地图旋转90度,同时视角倾斜60度 private void init() { if (aMap == null) { aMap =
修改主活动的布局和代码,加入两个按钮,分别用于启动NormalActivity和DialogActivity。 然后重写Activity的7个回调方法,分别打印相应的语句。...onSaveInstanceState()携带了一个Bundle类型参数,提供了一系列的方法保存数据,比如可以使用putString()方法保存字符串,使用putInt()方法保存整型数据,每个保存方法需要传入两个参数...(Bundle outState){ super.onSaveInstanceState(outState); String tempData = "Something you just...typed"; outState.putString("data_key",tempData); } 数据保存了,一直使用的onCreate()方法也有个Bundle类型参数,这个参数一般情况下都是...的onCreate()方法, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState
首先,Activity就会被销毁,onPause(), onStop(),onDestory()均会被调用,同时由于Activity是在异常状态下终止的,系统会在onStop()之前,调用onSaveInstanceState...} } @Override protected void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState...("extre_test"); Log.d(TAG, test); } 执行顺序: 1 onPause() 2 onSaveInstanceState(Bundle outState) 3 onStop...Activity优先级如下: 1 前台Activity 2 可见但非前台Activity 3 后台Activity 当系统资源不足的时候,会按照这个优先级使用onSaveInstanceState()和...只有一个Intent同时匹配这三个类别才能启动目标Activity。 action的匹配要求,Intent中的action存在且必须和过滤规则中的其中一个action相同。
这里,如果在异步数据完成加载之后,旋转屏幕,使用上述a、b两种方法都不会很难,无非是保存数据和恢复数据。...下面我将使用几个例子,分别使用上面的3种方式,和如何最好的解决上述的问题。...3、使用onSaveInstanceState()和onRestoreInstanceState()进行数据保存与恢复 代码: package com.example.zhy_handle_runtime_change...(Bundle outState) { super.onSaveInstanceState(outState); Log.e(TAG, "onSaveInstanceState"); outState.putSerializable...(Bundle outState) { mMyTask.setActivity(null); super.onSaveInstanceState(outState); Log.e(TAG,
原本以为只有在系统因为内存回收Activity时才会调用的onSaveInstanceState(),居然在转跳到其他Activity、打开多任务窗口、使用Home回到主屏幕这些操作中也被调用,然而onRestoreInstanceState...接着通过调查资料发现Activity中的onSaveInstanceState()里面有一句super.onRestoreInstanceState(savedInstanceState),Google...其实到这里大家也就明白了,就是因为这句话导致了重影的出现,于是我删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中的创建Fragment方法,然后再通过保存切换的状态...super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState...(Bundle outState) { //记录当前的position outState.putInt("position", position); }
答案就是使用 Lifecycle 提供的 LifecycleObserver 2.Lifecycle使用 (1)和MVP一样,要有一个最基础的接口 public interface BasePresenter...@Override protected void onSaveInstanceState(Bundle outState) { //横竖屏切换的时候 mLifecycleRegistry.markState...(Lifecycle.State.CREATED); super.onSaveInstanceState(outState); } @Override public...这里推荐大家更多的使用support包,不同版本platform中Activity和Fragment还存在大量support包中已修复的bug。...当然,光一个Lifecycle看不出什么,如果和LiveData和ViewModel一起用就会很好
我们在创建Fragment的管理器的时候,会选择导入那个包下的FragmentManager.有app包下和v4包下的,这里我推荐用v4包的FragmentManager。...但如果我们的Activity被回收,那么就会出现我点击的是A下标,结果出来的是BFragment,还会出现重叠等问题,那么如何解决呢?...So,在刚才避免Fragment重复创建的基础上,我们要记录上一次和当前点击的Fragment下标,并在onSaveInstanceState()方法中保存。...保存上一次和当前Fragement下标 其实解决Fragment还有一个简单方法,那就是注释掉onSaveInstance()中的super.onSaveInstance(outState),不推荐使用...onSaveInstanceState(Bundle outState)会在以下情况被调用: 当用户按下HOME键时。 从最近应用中选择运行其他的程序时。 按下电源按键(关闭屏幕显示)时。
Activity设置一个属性: android:persistableMode=“persistAcrossReboots” 然后我们的Activity就拥有了持久化的能力了,一般我们会搭配另外两个方法来使用...: public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) public void...如何让模拟器横竖屏切换 如果你的模拟器是GM的话。直接按模拟器上的切换按钮即可,原生模拟器可按ctrl + f11/f12切换! 4....三个核心方法: onCreate(Bundle savedInstanceState); onSaveInstanceState(Bundle outState); onRestoreInstanceState...(Bundle savedInstanceState); 你只重写onSaveInstanceState()方法,往这个bundle中写入数据,比如: outState.putInt("num",
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。 onPause()。这个方法在系统准备去启动或者恢复另一个活动的时候调用。...我们通常会在这个方法中将一些消耗CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。 onStop()。...@Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState...(outState); outState.putString("key", "value"); } 使用的onCreate()方法其实也有一个Bundle 类型的参数。...@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)
如何解决此问题呢?...(outState)方法了,就不会报异常了。...outState 对象为空..在onSaveInstanceState()函数中不使用到outState即可. ...[java] view plaincopy @Override protected void onSaveInstanceState(Bundle outState) { // ...TODO Auto-generated method stub //super.onSaveInstanceState(outState); } 第二个、使用ListFragment
我们来回顾一下关于Activity的知识点,这个是面试中最常问的问题之一,Activity也是Android中四大组件,最重要的一个组件,我们在实际开发中,需要我们开发者理解它的生命周期还有对启动模式特殊场景的使用...引入两个方法 onSaveInstanceState onRestoreInstanceState 一般情况下,这两个方法不会被执行,那什么时候会执行?...三种优先级: 前台Activity,优先级最高 可见但非前台Activity 后台Activity,优先级最低 上面两种情形导致Activity被销毁,这时我们可以通过上面说的两个方法进行数据的保存和恢复...protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState...); Log.d(TAG, "onSaveInstanceState"); outState.putString("extra_test", "test"); }
领取专属 10元无门槛券
手把手带您无忧上云