完成并重新启动活动以切换黑暗模式似乎会导致活动的多个实例

时间:2018-08-20 22:13:48

标签: android android-activity

我在片段中有一个按钮,可在主应用程序“活动”中的某些片段上切换深色主题。当用户点击切换开关时,该片段中将执行以下代码:

if (isChecked) {
               Util.startNewThread(new Runnable() {
                   @Override
                   public void run() {
                       Utilities.saveUserNightModeStatus(true);
                   }
               });

                Intent intent = getActivity().getIntent();
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                getActivity().finish();
                startActivity(intent);

            }

还有一个else块,其代码(基本上是重复的)用于切换另一种方式。

当运行该应用程序的设备的方向与主屏幕方向相反(例如,以纵向主屏幕保持在横向方向)且处于黑暗模式时,按下主屏幕按钮可放置该应用程序在后台运行,然后将应用重新带回前台,onPause()onResume()之后被调用,如果再次按下主页按钮,则会由于{中的某些接收者未注册而导致崩溃{1}}已经取消注册(因为onResume之后调用了onPause)。

另一个奇怪的效果是,有时原本应该显示的对话框没有出现,但是如果在激发动作后关闭了暗模式,则会出现该对话框(即,点击了某项,则该对话框不会显示)。 t出现,然后关闭暗模式,然后出现对话框,而不必再次点按任何东西,就像一直在那儿一样,但是与已经在运行的亮模式活动相关联。

我观察到,如果在恢复应用后更改了方向,则一切正常。这似乎是一个很强的线索,但是我不确定这意味着什么或用此知识做什么。

将调用顺序切换为onPause()finish()无济于事,使用片段中的接口在活动应自行完成时也无法与活动进行通信。有问题的行为似乎总是在黑暗模式下出现,这不是默认模式(即,当您首次安装该应用程序时,它处于亮模式)。

我想象使用一些意图标志可能会解决此问题,但是在进行大量实验并造成意想不到的后果之前,由于这些标志似乎有很多选择,我想看看这里的人是否知道发生了什么事情并可以提供很好的治疗方法。

0 个答案:

没有答案