not perform this action after onSaveInstanceState 可以看下实际报错的地方 private void checkStateLoss() {...not perform this action after onSaveInstanceState"); }...大多数场景,显示dialog,一般都是用户在操作的时候,这个时候调用DialogFragment#show()方法展示是没有问题的 先看下源码 public void show(@NonNull FragmentManager...not perform this action after onSaveInstanceState 作为规避,有两个方案 一 在页面不可见的时候,调用展示dialog无效 fun showDialog...onResume的时候,触发Dialog的显示,代码就不贴了 推荐使用DialogFragment 建议展示Dialog的地方,统一使用DialogFragment,更好的处理生命周期的各种场景,而且在
一、问题 DialogFragment 偶现IllegalStateException: Can not perform this action after onSaveInstanceState。...ft.commitAllowingStateLoss(); } } 重写父类show方法,传入空的FragmentManager,目的是触发父类show方法里需要赋值的变量被赋值,然后在try-catch...之后手动调用commitAllowingStateLoss 三、结语 送人玫瑰 手留余香 如果对您有帮忙,请点赞支持我~~
再也不用担心出现 Can not perform this action after onSaveInstanceState 这样的异常了。...isMainThread()) { throw new IllegalStateException("you should perform the task at main thread."...boolean isMainThread() { return Looper.getMainLooper().getThread() == Thread.currentThread(); } } 在...Activity 或 Fragment 中这样使用 private LifecycleDelegate lifecycleDelegate = new LifecycleDelegate(this); 然后在适当的时机调用...lifecycleDelegate.scheduleTaskAtStarted 该辅助类会检查是否在主线程调用,以确保线程安全以及在主线程更新 UI。
简陋的目录 1、getActivity()空指针 2、异常:Can not perform this action after onSaveInstanceState 3、Fragment重叠异常---...下面罗列一些,有常见的,也有极度隐蔽的一些坑,也是我在用单Activity多Fragment时遇到的坑,可能有更多坑可以挖掘......异常:Can not perform this action after onSaveInstanceState 有很多小伙伴遇到这个异常,这个异常产生的原因是: 在你离开当前...如果你想恢复到用户离开时的那个Fragment的界面,你还需要在onSaveInstanceState(Bundle outState)里保存离开时的那个可见的tag或下标,在onCreate“内存重启...还有一些比较隐蔽的问题,不影响app的正常运行,仅仅是一些显示的BUG,并没有在上面介绍,在本系列的最后一篇,我给出了我的解决方案,一个我封装的Fragmentation库,解决了所有动画问题,非常适合单
Recycle (view): 该View之前曾用于显示指定适配器位置的数据,那么这个View可能会被放置在一个缓存中,以便可以在之后被复用去显示同样类型的数据.上述操作可以跳过布局文件的初始化加载或创建...Dirty (view): 一个子组件在显示之前,必须被适配器(Adapter)重新绑定....之间,用于在布局计算时成批量地观察数据集的变化....注意这些方法可能不能去计算适配器的位置, 如果在 notifyDataSetChanged() 方法被调用, 同时新的布局在没有被计算时....当你在重写布局管理器 RecyclerView.LayoutManager 时, 你总是想要去获取布局位置(Layout Position), 当你在重写 适配器 RecyclerView.Adapter
方式添加,在由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)时能保留这些数据。...Fragment有个常见的异常: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState...首先,onSaveInstanceState()在onPause()之后,onStop()之前调用。...上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。...//JSON文件 app:lottie_loop="true" //循环播放 app:lottie_autoPlay="true" /> //自动播放 然后通过下面代码显示对话框
方式添加,在由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)时能保留这些数据 可以在Fragment的onAttach()中通过getArguments()获得传进来的参数...Fragment常见异常 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState...由于onSaveInstanceState()在onPause()之后,onStop()之前调用。...Fragment和Activity完整的生命周期如上图所示 当Fragment在Activity的onCreate()中被添加时 Activity super.onCreate执行完毕 Fragment...中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
Fragment有个常见的异常: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState...首先,onSaveInstanceState()在onPause()之后,onStop()之前调用。...上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。..." //JSON文件 app:lottie_loop="true" //循环播放 app:lottie_autoPlay="true" /> //自动播放 然后通过下面代码显示对话框...懒加载 懒加载主要用于ViewPager且每页是Fragment的情况,场景为微信主界面,底部有4个tab,当滑到另一个tab时,先显示”正在加载”,过一会才会显示正常界面。
Android Training 中Getting Started部分的阅读笔记 最近打算把Android Training中的文章都读一遍,然后摘录下其中某些内容,这些内容对我而言可能是我不知道或者知道得不具体或者我觉得很重要的内容...onDestroy方法之前不调用onPause和onStop的情况 Note: The system calls onDestroy()after it has already calledonPause...Activity之前会调用onSaveInstanceState()方法使用键值对形式的Bundle将当前Activity中的某些重要数据保存起来,然后在Activity重建的时候调用onRestoreInstanceState...在Manifest文件中使用android:installLocation属性可以设置应用安装时的安装目的地。...); boolean isIntentSafe = activities.size() > 0; (3)如果有多个应用能够处理这个隐式Intent的话,一般startActivity的话会出现一个选择对话框
首先说一下探索过程: 起初,我认为此时旋转无非是再启动一次线程,并不会造成异常,我只要即使的在onDestroy里面关闭上一个异步任务就可以了。...事实上,如果我关闭了,上一次的对话框会一直存在;如果我不关闭,但是activity是一定会被销毁的,对话框的dismiss也会出异常。...下面我们希望有一种解决方案:在加载数据时旋转屏幕,不会对加载任务进行中断,且对用户而言,等待框在加载完成之前都正常显示: 当然我们还使用Fragment进行数据保存,毕竟这是官方推荐的: OtherRetainedFragment...中,如果没有开启任务(第一次进入),开启任务;如果已经开启了,调用setActivity(this); 在onSaveInstanceState把当前任务加入Fragment 我设置了等待5秒,足够旋转三四个来回了...~~~~可以看到虽然在不断的重启,但是丝毫不影响加载数据任务的运行和加载框的显示~~~~ 效果图: 可以看到我在加载的时候就三心病狂的旋转屏幕~~但是丝毫不影响显示效果与任务的加载~~ 最后,说明一下
但是,当您使用 Fragment 时,没有直接的方法来拦截返回。...在 Fragment 类中没有可用的 onBackPressed() 方法,这是为了防止同时存在多个 Fragment 时发生意外行为。...过去,您需要在 Activity 中重写两个方法:onSaveInstanceState 和 onRestoreInstanceState。 您还可以在 onCreate 方法中访问恢复的状态。...同样,在 Fragment 中,您可以使用onSaveInstanceState 方法(并且可以在 onCreate,onCreateView 和onActivityCreated方法中恢复状态)。...e.g. perform actions using Espresso: onView(withId(R.id.refresh)).perform(click()) // To obtain a Fragment
代码例如以下所看到的: 这样,在一个页面中能够反复跳转并显示不同的内容。...举例来说,这可能发生在,如果一个前台活动在一个对话框(其他进程的)运行之后仍然是可视的,比如输入法的弹出时。 寄宿着一个服务,该服务绑定到一个可视的活动。...在 Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。...他们在使用你的应用程序时,并不希望每次都要处理这个对话框。 因此,在程序里对响应性能的设计很重要,这样,系统不会显示 ANR 给用户。...如果耗时操作需要让用户等待,那么可以在界面上显示进度条。
每个 Preference 均作为项目显示在列表中,并提供适当的 UI 供用户修改设置。...例如,您可以允许用户控制应用同步数据的频率,控制应用是否仅在有 Wi-Fi 时才执行上传/下载操作,以及控制应用能否在漫游时使用数据,等等。...扩展 Preference 类时,您需要执行以下几项重要操作: 指定在用户选择设置时显示的用户界面。 适时保存设置的值。 使用显示的当前(默认)值初始化 Preference。...在系统请求时提供默认值。 如果 Preference 提供自己的 UI(例如对话框),请保存并恢复状态以处理生命周期变更(例如,用户旋转屏幕)。 下文介绍如何完成所有这些任务。...不过,大多数自定义设置都会扩展DialogPreference 以显示对话框,从而简化这一过程。
我在抄 zxing 的时候不小心引入了。...View是动态测量设置宽度或者高度时也是有问题的; 16、CardView 默认是带有背景色的,在特定情况下,会出现背景色覆盖不了的情况。...23、使用 Rxjava 的 mergeDelayError()方法时需要订阅在主线程的话,.observeOn(AndroidSchedulers.mainThread(), true)需要使用这个方法...反正我被坑了。...的 commit,将会抛出can not perform this action after onsaveinstancestate的异常。
它和 onPause() 方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause() 方法会得到执行,而 onStop() 方法并不会执行。...在这由于文字很多,我总结了关于Android一系列的学习资料及思维导图免费分享给大家,文末有领取!...image.gif 为了让 DialogActivity 使用对话框式主题,我们在 AndroidManifest.xml 中做如下设置: <?...策略 其实官方文档给出了解决方案,Activity 中提供了一个 onSaveInstanceState() 回调方法,这个方法可以保证在活动被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题...Code 我们现在对上面的代码进行修改,在 MainActivity 中添加如下代码将临时数据进行保存: @Override protected void onSaveInstanceState
JetPack 让 Android 一飞冲天 为了可以进行模板式的开发,Google 在2018年推出了 Android Jetpack。...Can not perform this action after onSaveInstanceState WindowManager$BadTokenException, is your activity...除了我们非常熟悉的 Model、View 和 ViewModel 这三个部分,在 MVVM 的实现中,还引入了隐式的一个 Binder 层,我们要完整的采用 MVVM 必须熟练的掌握 DataBinding...网上学习 Android 的资料很多,但大都杂乱、零散、碎片化,如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
可以观察到它设置了 action 和category 属性。 android.intent.action.MAIN 决定应用程序最先启动的Activity。...在 Activity 由于异常情况被终止时,系统会调用 onSaveInstanceState 方法来保存当前 Activity 的状态,该方法调用于 onStop 之前,与 onPause 方法没有时序关系...当异常终止的 Activity 被重建时,会调用 onRestoreInstanceState 方法(该方法在 onStart 之后),并且把 Activity 销毁时 onSaveInstanceState...onSaveInstanceState()时机: (1)用户按下Home键 (2)横竖屏切换 (3)按下电源按钮(关闭屏幕显示) (4)内存不足导致优先级的Activity被杀死 onRestoreIntanceState...方法中传入的 Bundle 对象是销毁时 onSaveInstanceState 保存的,onRestoreIntanceState 在 onStart之后。
但是,当您使用 Fragment 时,没有直接的方法来拦截返回。在 Fragment 类中没有可用的onBackPressed() 方法,这是为了防止同时存在多个 Fragment 时发生意外行为。...过去,您需要在 Activity 中重写两个方法:onSaveInstanceState 和onRestoreInstanceState。您还可以在 onCreate 方法中访问恢复的状态。...同样,在 Fragment中,您可以使用onSaveInstanceState 方法(并且可以在 onCreate,onCreateView 和onActivityCreated方法中恢复状态)。...e.g. perform actions using Espresso: onView(withId(R.id.refresh)).perform(click()) // To obtain a Fragment...supportFragmentManager .beginTransaction() .add(R.id.container, MyFragment::class.java, null) .commit() // After
设置图片显示的属性 : -- image (普通) : 访问或设置该控件显示的图片; -- HighlightedImage (高亮) : 设置图片处于 高亮状态 时显示的图片; (3) 动画显示方法..., 完整显示图片; -- Aspect Fill : 保持纵横比缩放, 保证图片短边能显示出来, 只在水平或垂直方向某一个方向是完整的, 另一个方向截取; -- Center : 不缩放图片, 显示图片的中间区域..., buttonIndex 是点击的按钮的索引; -- "- (void) willPresentAlertView : (UIAlertView *) alertView" 方法 : 对话框将要显示时激发该方法...buttonIndex" 方法 : 单击某个按钮已经隐藏警告框后激发该方法; -- "- (void) alertViewCancel : (UIAlertView * ) alertView " 方法 : 对话框被取消时激发的方法...按钮 UIActionSheet 固定按钮 : -- 取消按钮 : 灰色背景, 主要用于取消该 UIActionSheet 控件显示; -- 销毁按钮 : 红色背景, 用于删除某记录时, 使用该按钮确认销毁
两个子活动分别加入一个TextView, 然后在AndroidManifest.xml内配置DialogActivity的主题。...使用了android:theme属性,用于给当前活动指定主题的,这里用的,android:theme="@style/Theme.AppCompat.Dialog" 让DialogActivity使用对话框式的主题...观察活动的生命周期 启动时 依次执行onCreate(),onStart(),onResume()。...活动被回收怎么办 当一个活动进入停止状态,有可能被系统回收,那么当有一个活动A,在A基础上启动了活动B,A进入停止状态,这时由于系统内存不足,A被回收掉,这时按下Back键还是会正常显示A,但是不会执行..., 第一个参数是键,用于后面从Bundle中取值, 第二个参数是真正要保存的内容, 在MainActivity添加以下代码,将临时数据保存: @Override protected void onSaveInstanceState
领取专属 10元无门槛券
手把手带您无忧上云