首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Activity在使用黑暗模式时被实例化两次

是因为在切换主题时,Activity会被销毁并重新创建。这是因为黑暗模式是通过更改应用的主题来实现的,而主题的更改会导致Activity的重新创建。

在Android中,Activity是应用程序的一个基本组件,用于展示用户界面和处理用户交互。当应用程序切换到黑暗模式时,系统会重新加载应用的主题资源,并重新创建Activity以适应新的主题。

这种行为可能会导致一些问题,例如数据丢失或界面状态的重置。为了解决这个问题,可以使用保存和恢复状态的方法来保留Activity的数据和状态。可以通过重写Activity的onSaveInstanceState()方法来保存数据,并在onCreate()方法中的savedInstanceState参数中恢复数据。

另外,为了避免Activity在切换主题时被实例化两次,可以在AndroidManifest.xml文件中为Activity添加属性android:configChanges="uiMode"。这样做可以告诉系统在切换主题时不重新创建Activity,而是调用Activity的onConfigurationChanged()方法来处理主题的更改。

总结起来,Android Activity在使用黑暗模式时被实例化两次是因为切换主题导致Activity的销毁和重新创建。为了解决这个问题,可以使用保存和恢复状态的方法来保留数据和状态,并可以通过设置android:configChanges属性来避免Activity的重新创建。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )

资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理...) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 ) ---- 文章目录...三、使用 Hook 技术在主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 1、反射获取 ActivityThread 类 2、反射获取 ActivityThread..., 执行到主线程 实例化 Activity 对象之前 , 还要替换回去 ; 插件包组件启动方式 : 使用 Intent 启动插件包时 , 一般都使用隐式启动 ; 调用 Intent 的 setComponent...Activity 示例类之前 , 使用插件包中的 Activity 组件替换之前在 AMS 调用之前使用的 占坑用的 Activity , 就是要创建 插件包 中的 Activity 类的实例对象 ;

1.3K30
  • Activity三问—猫眼真题

    前言 Activity算是我们使用最多也是最基础的内容了。但是为什么面试还会频频问到呢?即使是面试高级Android职位。说到底还是因为他足够重要,万丈高楼平地起,打好基础永远都是第一位的。...B启动模式为singleInstance不变,A→B→C的时候点击两次返回,生命周期如何调用。 屏幕旋转时Activity的生命周期,如何防止Activity重建。 介绍几种启动模式。...standard,默认模式,每次启动都会新建一个Activity实例,并进入当前任务栈 singleTop,如果要启动的Activity在栈顶存在实例,则不会重新创建Activity,而是直接使用栈顶的...singleTask,如果要启动的Activity在栈中存在实例,则不会重新创建Activity,而是直接使用栈里的Activity实例,并回调onNewIntent方法。...重新创建的话需要做如下配置:在targetSdkVersion的值小于或等于12时,配置 android:configChanges="orientation", 在targetSdkVersion的值大于

    55330

    Android高频面试专题 - 基础篇(一)Activity

    如果我们不想自己的Activity在系统配置发生改变时被销毁后再重建,只需在清单文件中对应Activity下的android:configChanges中添加对应场景配置项,如orientation|screenSize...singleInstance模式 会启动一个新的任务栈来管理当前程序中singleInstance模式启动的Activity,在Android系统中,该Activity只有一个实例。...这种模式主要是为了,在不同程序间共享同一个Activity实例。...此标记位一般会和singleTask启动模式一起出现,此情况下,若被启动的Activity实例存在,则系统会调用它的onNewIntent。...另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable

    2K31

    彻底明白Activity启动模式-SingleTop、SingleTask、SingleInstance具体使用场景

    在 singleTop 栈顶复用模式,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。...不过使用standard又会创造2个A的实例。 singleTask 栈内复用模式 如果要启动的Activity在当前栈内启动,activity只会在任务栈里面存在一个实例。...他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。应用场景:呼叫来电界面。这种模式的使用情况比较罕见,在Launcher中可能使用。...以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。 3....被singleInstance模式的Activity开启的其他activity,能够在新的任务中启动,但不一定开启新的任务,也可能在已有的一个任务中开启。

    4K30

    Android常见问题及开发经验总结(四)

    android中单例模式的使用场景一般有哪些?需要注意哪些问题? 单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点 1)应用中某个实例对象需要频繁的被访问。...2)应用中每次启动只会存在一个实例。如账号系统,数据库系统。 使用单例需要注意以下几点问题: 1)必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化。...这个我是不建议使用,因为 一是有被回收的危险,导致值为空,二是会有值需要清理的问题。 什么意思呢?这个说来话长 ,简单来说 是因为静态变量和类一样都是在进程加载的时候被加载,在进程结束的时候被结束。...另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable...这个问题 网上太多,但是好多都是同一篇文章  1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2、设置Activity

    42830

    Activity的启动模式

    首先,我们的Activity对象在我们在Android工程的AndroidManifest.xml配置文件中注册,之后才可以被我们的程序使用,而在我们注册Activity时,有一个launchMode属性是可以赋值的...,我们在Android模拟器中可以看到MainActivity又被创建了两次,而此时的LogCat中的信息: !...**当launchMode属性设置为standard时,如果有进程要启动这个Activity,那么无论这个Activiy是否在活动栈栈顶,都会被再次启动一次,**那么怎么解决呢。...,Ok,我们可以猜想关于singleTop属性的作用:**再返活动栈中,如果要启动的Activity在活动栈栈顶,那么,将不会创建这个Activity的实例,但是如果不在,那么就会创建一个新的Activity...Activity ok,关于Activity的启动模式就这么多。

    61110

    精选Android中高级高频面试题:四大组件及Fragment原理

    ; singleTask栈内复用模式:只要Activity在一个任务栈中存在,那么多次启动此Activity都不会重新创建实例,并回调onNewIntent方法,此模式启动Activity A,系统首先会寻找是否存在...启动模式,其效果和在XML中指定该启动模式相同; FLAG_ACTIVITY_CLEAR_TOP : 具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈...这个标记位一般会和singleTask模式一起出现,在这种情况下,被启动Activity的实例如果已经存在,那么系统就会回调onNewIntent。...参考回答: 不设置Activity的android:configChanges时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; onPause(...⽤ newInstance() 来实例化⼀个对象。

    2K00

    行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案

    standard标准模式:每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的Activity默认会进入启动它的Activity所属的任务栈中; singleTop栈顶复用模式...; singleTask栈内复用模式:只要Activity在一个任务栈中存在,那么多次启动此Activity都不会重新创建实例,并回调onNewIntent方法,此模式启动Activity A,系统首先会寻找是否存在...这个标记位一般会和singleTask模式一起出现,在这种情况下,被启动Activity的实例如果已经存在,那么系统就会回调onNewIntent。...如果被启动的Activity采用standard模式启动,那么它以及连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈中; FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS...不设置Activity的android:configChanges时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; onPause() →onStop

    80120

    Activity 的 36 大难点,你会几个?「建议收藏」

    ,切横屏时会执行一次,切竖屏时会执行两次 设置 Activity 的 android:configChanges="orientation" 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次...Standard 模式(默认模式) 说明: 每次启动一个 Activity 都会又一次创建一个新的实例入栈,无论这个实例是否存在。...2.2 启动模式的使用方式 在 Manifest.xml 中指定 Activity 启动模式 一种静态的指定方法 在 Manifest.xml 文件里声明 Activity 的同一时候指定它的启动模式...它等同于在 xml 中指定 Activity 的属性. 2.7 onNewInstent()方法什么时候执行 这个是启动模式中的了,当此 Activity 的实例已经存在,并且此时的启动模式为 SingleTask...除非该 activity 不是被用户主动销毁的,通常 onSaveInstanceState() 只适合用于保存一些临时性的状态,而 onPause() 适合用于数据的持久化保存。

    79620

    Android四大组件完全解析(一)---Activity

    Activity也提供了一个API来管理与activity相关的内部状态。例如,可以用来记录用户的偏好设置,并对用户的日历接卖弄进行一个初始化,或者是在使用浏览器时为用户显示一个默认的主页。...activity可以被多次初始化,每一个实例可以属于不同的任务栈,任务栈中可以有多个该activity的实例 singleTop:如果activity实例存在于当前栈的顶端则重用该实例。...activity可以被多次初始化,每个实例可以属于不同的栈,一个栈可以有过个实例(但是仅仅是activity不在栈顶时才会去重新创建activity的实例)。...但是在存储该activity的任务栈中不会去初始化其他activity的实例。所以是单例任务栈。...但是如果在开启一个activity时使用singleTask模式,如果后台任务栈中存在该activity的实例,则整个后台任务栈就会被带到前台来。 如下图四所示: ?

    1.6K100

    Android Heroes Reading Notes 4

    singleTop:在singleTop模式下,如果当前Activity D位于栈顶,此时通过Intent跳转到它本身的Activity(即D),那么不会重新创建一个新的D实例(走onNewIntent...应用实例:三条推送,点进去都是一个activity。 singleTask:在singleTask模式下,Task栈中只能有一个对应Activity的实例。...通过这个属性可以让task每次在初始化的时候都只有这一个Activity。...它们的共同点是初始时都不会显示,但是前者只会在显示时才去渲染整个布局,而后者在初始化布局树的时候就已经添加到布局树上了,相比之下前者的布局具有更高的效率。...内存优化实例 (1)Bitmap优化 使用适当分辨率和大小的图片; 及时回收内存:从Android 3.0开始,Bitmap被放置到了堆中,其内存由GC管理,所以不用手动调用bitmap.recycle

    44810

    2020年Android初级面试题一年汇总出炉,吃透它!

    所以如果使用 add 一般会伴随 hide()和show(),避免布局重叠; 使用 add,如果应用放在后台,或以其他方式被系统销毁,再打开时,hide()中引用的 fragment 会销毁,所以依然会出现布局重叠...standard 标准模式:每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的 Activity 默认会进入启动它的 Activity 所属的任务栈中; singleTop...依然会被重新创建; singleTask 栈内复用模式:只要 Activity 在一个任务栈中存在,那么多次启动此 Activity 都不会重新创建实例,并回调onNewIntent 方法,此模式启动...不设置 Activity 的 android:configChanges 时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; onPause()→...",经过机型测试 在 Android5.1 即 即 API 3 23 级别下,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 在 Android9 即 即 API 8 28 级别下,切屏不会重新调用各个生命周期

    1.3K30

    Android拾萃- Activity的生命周期和启动模式

    当您的 Activity 因用户按了返回 或 Activity 自行完成而被销毁时,系统的 Activity 实例概念将永久消失,因为行为指示不再需要 Activity。...但是,如果系统因系统局限性(而非正常应用行为)而销毁 Activity,尽管 Activity 实际实例已不在,系统会记住其存在,这样,如果用户导航回实例,系统会使用描述 Activity 被销毁时状态的一组已保存数据创建...如果Activity A 启动 B 在启动 C,如果A和B被回收了,这个时候C返回,B会重绘(实例被回收了,但是栈还是在的) 由重建引发的窗体泄漏 Android的每一个Activity都有个WindowManager...android:configChanges的一些属性 1、不设置Activity的android:configChanges时,切屏会重新调用整个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2、设置...singleInstance 模式   在singleInstance模式下,该Activity在整个android系统内存中有且只有一个实例,而且该实例单独尊享一个Task。

    1.6K50

    Android面试常问基础知识点(附详细解答)

    onStop(): 当Activity被新的Activity覆盖不可见时被系统调用 onDestory(): 当Activity被系统销毁杀掉或是由于内存不足时调用 2)Service a) onBind...的四种启动模式对比 1)standard:标准启动模式(默认),每启动一次Activity,都会创建一个实例,即使从ActivityA startActivity ActivityA,也会再次创建A的实例放于栈顶...应用场景:应用的主页面 11、Activity状态保存于恢复 Activity被主动回收时,如按下Back键,系统不会保存它的状态,只有被动回收时,虽然这个Activity实例已被销毁,但系统在新建一个...Activity实例时,会带上先前被回收Activity的信息。...我们平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,然后再进行相关操作。如果我们需要使用一个已有数据的数据库怎么办呢?

    2.7K31

    Activity启动模式SingleTask和Intent.FLAG_ACTIVITY_CLEAR_TOP区别

    4种启动模式 standard:标准模式,也是系统默认的启动模式,如果一个 Activity 的启动模式是 standard,则该 Activity 可以被多次实例化,且可以在不同的任务栈中存在。...singleTop:栈顶复用模式,如果一个 Activity 的启动模式是 singleTop,则该 Activity 可以被多次实例化,且可以在不同的任务栈中存在,且一个任务栈可以存在多个 singleTop...singleTask:栈内复用模式。在第一次启动这个 Activity 时,系统便会创建一个新的任务栈,并且初始化 Activity 的实例,放在新任务栈的底部。...前面也说过了, taskAffinity 属性是和 singleTask 模式搭配使用的。 4.singleInstance:单实例模式。...是一种单实例模式,在这种模式下,如果该Activity在栈中存在,那么多次启动此Activity都不会重新创建实例,而是销毁在它之上的所有Activity(不包括它本身),复用该Activity并调用它的

    1.1K10

    Android APP 快速 Pad 化实现

    Tab 栏被移到了左侧1区,Tab Content 被移到了中间2区,而在2区打开的 Details 页面则要求在3区展示,而不再是像手机 APP 一样全屏展示。...方案2:在主 Activity 启动 A 类 Activity 时,获取 A 的根布局,添加到主 Activity 在右侧3区预留的一个空布局中。...这样A类 Activity 已经成为一个普通实例化对象,不再由 Android 系统管理。...1,实现的问题,使用多Task的实现方式,在Android中需要声明Activity的TaskAffinity,而 TaskAffinity 不能在代码中动态声明,而只能写在配置文件中,导致不同Tab打开的同一个...Activity可能需要在配置文件中声明两次,因为它们的 TaskAffinity 要不一样,而同一个Activity是不能声明两次的,所以只有写一个空的 Activity 继承它,导致大量空Activity

    2.2K60

    Android 开发基础常识

    onDestroy():activity被完全从系统内存中移除时调用,该方法被 16 .在Android中,怎么节省内存的使用,怎么主动回收内存?   ...27.屏幕的适配   文字使用SP ,控件使用dp ,weight   多布局, 里面加不同的dimens.xml   图片有要求的话,采用多图片处理 28.Activity的启动模式   ...1. standard 默认标准的启动模式, 每次startActivity都是创建一个新的activity的实例。       ...4. singleInstance 单态 单例模式     单一实例,整个手机操作系统里面只有一个实例存在。...1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,     切横屏时会执行一次,切竖屏时会执行两次   2、设置Activity的android:

    9710
    领券