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

Android应用的onCreate被多次调用,如何保证只运行初始化res一次

在Android应用中,onCreate()方法是Activity生命周期中的一个重要方法,它在Activity第一次创建时被调用。然而,有时候onCreate()方法可能会被多次调用,这可能会导致一些问题,例如资源的重复初始化。为了保证只运行初始化res一次,可以采取以下几种方法:

  1. 使用标志位:在Activity中定义一个boolean类型的变量,用于标记是否已经初始化res。在onCreate()方法中,首先检查该标志位,如果已经被设置为true,则直接返回,不再执行初始化res的代码。如果标志位为false,则执行初始化res的代码,并将标志位设置为true。
代码语言:txt
复制
private boolean isResInitialized = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (isResInitialized) {
        return;
    }
    // 初始化res的代码
    // ...
    isResInitialized = true;
}
  1. 使用Application类:创建一个自定义的Application类,并在其中添加一个boolean类型的变量,用于标记是否已经初始化res。在自定义的Application类中,重写onCreate()方法,在该方法中执行初始化res的代码,并将标志位设置为true。然后,在Activity的onCreate()方法中,通过getApplication()方法获取到Application实例,并检查标志位,如果已经被设置为true,则直接返回,不再执行初始化res的代码。
代码语言:txt
复制
public class MyApplication extends Application {
    private boolean isResInitialized = false;

    @Override
    public void onCreate() {
        super.onCreate();
        if (!isResInitialized) {
            // 初始化res的代码
            // ...
            isResInitialized = true;
        }
    }
}

在AndroidManifest.xml文件中,将自定义的Application类添加到application标签中:

代码语言:txt
复制
<application
    android:name=".MyApplication"
    ...
</application>
  1. 使用SharedPreferences:使用SharedPreferences存储一个boolean类型的值,用于标记是否已经初始化res。在Activity的onCreate()方法中,首先通过SharedPreferences获取该标志位,如果已经被设置为true,则直接返回,不再执行初始化res的代码。如果标志位为false,则执行初始化res的代码,并将标志位设置为true。
代码语言:txt
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    boolean isResInitialized = sharedPreferences.getBoolean("isResInitialized", false);
    if (isResInitialized) {
        return;
    }
    // 初始化res的代码
    // ...
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean("isResInitialized", true);
    editor.apply();
}

以上是几种保证只运行初始化res一次的方法,可以根据实际情况选择适合的方法来解决该问题。对于Android开发,腾讯云提供了丰富的云服务和产品,例如腾讯云移动开发套件、腾讯云移动推送、腾讯云移动直播等,可以根据具体需求选择相应的产品进行开发和部署。具体产品介绍和相关链接地址可以参考腾讯云官方网站。

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

相关·内容

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

这是Activity生命周期中最后一个回调,常做回收工作、资源释放; 延伸:从整个生命周期来看,onCreate和onDestroy是配对,分别标识着Activity创建和销毁,并且可能有一次调用...;从Activity是否可见来说,onStart和onStop是配对,这两个方法可能调用多次;从Activity是否在前台来说,onResume和onPause是配对,这两个方法可能调用多次;除了这种区别...也就是说,onCreate()只会在第一次创建service时候调用多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作; onStartComand()...startService():通过这种方式调用startService,onCreate()只会被调用一次多次调用startSercie会多次执行onStartCommand()和onStart()方法...推荐文章:Android Service两种启动方式详解(https://www.jianshu.com/p/4c798c91a613) 3、如何保证Service不被杀死 ?

73520

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

这是Activity生命周期中最后一个回调,常做回收工作、资源释放; 延伸:从整个生命周期来看,onCreate和onDestroy是配对,分别标识着Activity创建和销毁,并且可能有一次调用...|screenSize"时,机型测试通过,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法; 推荐文章:Android 横竖屏切换加载不同布局 8、如何启动其他应用...也就是说,onCreate()只会在第一次创建service时候调用多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作; onStartComand()...参考回答: Service两种启动模式 startService():通过这种方式调用startService,onCreate()只会被调用一次多次调用startSercie会多次执行onStartCommand...3、如何保证Service不被杀死 ?

1.7K00

Android Service 使用

创建Service ,并配置2.1 待项目初始化完成后,右击项目包名,新建Service,设置组件名称为 MyService。...运行项目4.1 点击运行项目:4.2 点击“start”按钮,启动Service,查看日志:可以看到点击启动按钮后,MyService启动,onCreate()、onStartCommand() 函数调用...4.4 接着点击“start”按钮,多次启动Service看到日志:每点击一次“start”按钮,就会调用一次 Activity startService()函数,同时会调用一次MyService...Service在第一次创建启动时候调用onCreate()函数,只要该Service还在运行,就不会再次触发onCreate()函数;onStartCommand()函数则在每次启动Service时候都会调用...4.5 关闭Service点击“stop”按钮,关闭Service,查看日志:onDestroy() 函数是在Service销毁时候调用,在Service销毁掉了时候,即使再次“关闭”Service

21120

Android 系统开发_四大组件篇 -- 探讨 Activity 生命周期

回调方法 Activity 类中定义了 7 个回调方法,覆盖了 Activity 生命周期每一个环节: onCreate() 这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次创建时候调用...你应该在这个方法中完成活动初始化操作,比如加载布局、绑定事件等。 onStart() 这个方法在活动由不可见变为可见时候调用。 onResume() 这个方法在活动准备好和用户进行交互时候调用。...此时活动一定位于返回栈栈顶,并且处于运行状态。 onPause() 这个方法在系统准备去启动或者恢复另一个活动时候调用。...onDestroy() 这个方法在活动销毁之后调用,之后活动状态将变为销毁状态。 onRestart() 这个方法在活动由停止状态变为运行状态之前调用,也就是活动重新启动了。...策略 其实官方文档给出了解决方案,Activity 中提供了一个 onSaveInstanceState() 回调方法,这个方法可以保证在活动回收之前一定会被调用,因此我们可以通过这个方法来解决活动回收时临时数据得不到保存问题

42420

Android Service 服务(一)—— Service

,则调用onStart(),所以一个ServiceonStart方法可能会重复调用多次。 ...所以调用bindService生命周期为:onCreate --> onBind(一次,不可多次绑定) --> onUnbind --> onDestory。...在Service每一次开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能调用一次...三、 Service生命周期  Service生命周期并不像Activity那么复杂,它继承了onCreate()、onStart()、onDestroy()三个方法 当我们第一次启动Service...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行activity能最后一个终止。

1.2K30

Android笔记】Android Service 服务

> onDestroy() -> Service stop 如果Service还没有运行,则android调用onCreate(),然后调用onStart(); 如果Service已经运行,则调用onStart...所以调用bindService生命周期为:onCreate --> onBind(一次,不可多次绑定) --> onUnbind --> onDestory。...在Service每一次开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能调用一次...三、 Service生命周期 Service生命周期并不像Activity那么复杂,它继承了onCreate()、onStart()、onDestroy()三个方法 当我们第一次启动Service时...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行activity能最后一个终止。

74110

Android学习笔记(四)深入探讨Activity

在一个Activity从创建到销毁完整生存期内,它会经历活动生存期和可见生存期一次或者多次重复。...每一次转化都会触发以上方法处理程序。 · 完整生存期:对onCreate()一次调用和对onDestroy()最后一次调用之间时间范围。...使用onCreate方法初始化Activity,如果Activity意外终止,onCreate方法接受一个包含UI状态Bundle对象,该对象是在最后一次调用onSaveInstanceState时保存...如果Activity是有规律创建相同对象集,可以考虑在onCreate创建,因为onCreate在Activity生存期调用一次。 · 可见生存期:onStart和onStop之见时间。...在个别极端情况下,Android运行时可能会在一个Activity位于可见生存期事把它终止,而不调用onStop方法。

1.1K100

Android Service 服务解说

> onDestroy() -> Service stop 如果Service还没有运行,则android调用onCreate(),然后调用onStart(); 如果Service已经运行,则调用onStart...所以调用bindService生命周期为:onCreate --> onBind(一次,不可多次绑定) --> onUnbind --> onDestory。...在Service每一次开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能调用一次...Activity那么复杂,它继承了onCreate()、onStart()、onDestroy()三个方法 当我们第一次启动Service时,先后调用onCreate()、onStart()这两个方法...通常,后台进程会有很多个在运行,所以他们维护一个LRU最近使用程序列表来保证经常运行activity能最后一个终止。

52530

Android四大组件之Service

1.简介与定义 简介 Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。Service可由其他应用组件启动,而且即使用户切换到其他应用,Service仍将在后台继续运行。...()方法;2.如果service已处于运行中,调用startService()不会执行onCreate()方法,执行onStartCommand()方法。...也就是说,onCreate()只会在第一次创建service时候调用多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作。...这是由于 onCreate()方法只会在 Service第一次创建时候调用,如果当前 Service已经创建过了(第一次点击创建了 MyService),不管怎样调用 startService()...8.如何保证服务不会被杀死 第一种方式,返回 START_STICKY 或 START_REDELIVER_INTENT 当 Service因内存不足而系统kill后,一段时间后内存再次空闲时,系统将会尝试重新创建此

80210

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

方式绑定onCreate->onBind->onUnBind->onDestory(不管调用bindService几次,onCreate只会调用一次,onStart不会被调用,建立连接后,service...启动onCreate->onStartCommand->onDestory(start多次onCreate只会被调用一次,onStart会调用多次,该service会在后台运行,直至调用stopService...或是stopSelf) c) 又被启动又被绑定服务,不管如何调用onCreate()调用一次,startService调用多少次,onStart就会被调用多少次,而unbindService不会停止服务...4)ContentProvider:应该和应用生命周期一样,它属于系统应用应用启动时,它会跟着初始化应用关闭或被杀,它会跟着结束。...为此最好保证每次刷新时间是相同,这样可以保证整体画面过渡流畅。

2.3K31

Android基础_1 四大基本组件介绍与生命周期

1. onCreate(Bundle savedInstanceState)       当Activity第一次实例化时候系统会调用,整个生命周期调用1次这个方法。...系统销毁杀掉时系统调用,(整个生命周期调用1次)用来释放onCreate ()方法中创建资源,如结束线程等 2.2.3     3个嵌套循环 1.Activity完整生命周期:从第一次调用onCreate...当用户调用startService ()或bindService()时,Service第一次实例化时候系统会调用,整个生命周期调用1次这个方法,通常用于初始化设置。...()来停止服务时系统调用,(整个生命周期调用1次)用来释放onCreate()方法中创建资源 void onDestroy() 通过startService()方法启动服务       初始化结束后系统会调用该方法...注意:多次调用startService()方法会多次触发onStart()方法 void onStart(Intent intent) 通过bindService ()方法启动服务       初始化结束后系统会调用该方法

1.3K30

Android基础部分再学习---activity生命周期

在整个生命周期活动中,系统可能会调用onStart()和onStop()多次,因为活动之间交替进行隐藏或显示给用户。...一个Activity本质上只有三种状态: Resumed(运行)、Paused(暂停)、Stopped(停止),因为从Activity创建之后,它可能在这三种状态保持长久停留,其他回调方法结束后状态都只能称之为过渡状态...1、onCreate 最重要是在里面调用setContentView,还可以在里面初始化各控件、设置监听、并初始化一些全局变量。...即便是内存不足,回收了,再次Recreate的话,又是一次生命周期开始,又会执行onCreate方法。...3.如何强制性关闭一个activity Android下结束进程方法   一、结束一个活动Activity   要主动结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity

85920

Android应用界面开发——Fragment(实现图书详情界面)

在Activity运行过程中,可调用FragmentManageradd()、remove()、replace()方法动态地添加、删除或替换Fragment。...通常创建Fragment需要实现如下三个方法: onCreate():系统创建Fragment对象后回调该方法,在实现代码中初始化想要在Fragment中保持必要组件。...onAttach():当该Fragment添加到Activity时回调。该方法只会被调用一次onCreate():创建Fragment时回调,该方法只会被调用一次。...onStop():停止Fragment时回调。 onDestroyView():销毁该Fragment所包含View组件时调用。 onDestroy():销毁Fragment时调用。...该方法调用一次。 onDetach():将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDatach()方法,该方法只会被调用一次

2.5K20

Android carservice架构及启动流程

是一个后台运行组件,可以长时间运行并且不需要和用户去交互,这里即使应用销毁,它也可以正常工作 ├── tests ├── tools //是一系列工具,要提到是里面的emulator,测试需要用到...) 启动CarService后首先调用onCreate,创建ICarImpl对象并初始化,在此时创建了一系列car相关核心服务,并遍历init初始化 然后调用onBind将该ICarImpl对象返回给...所以调用bindService生命周期为:onCreate --> onBind(一次,不可多次绑定) --> onUnbind --> onDestroy 在Service每一次开启关闭过程中,...只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestroy在一个生命周期中只能调用一次 ---- 2.7....mCarServiceConnection(回调) mCarServiceConnection初始化如下: 其中返回ICarImpl保存在了CarServiceHelperServicemCarService

2.2K20

很全面的Android面试题

Activity中提供了一个 onSaveInstanceState()回调方法,这个方法会保证一定在活动回收之前调用, 可以通过这个方法来解决活动回收时临时数据得不到保存问题。...保证整个任务栈里面只有一个实例存在 会调用 onNewInstance(),复用已经存在实例 应用场景: singleTask适合作为程序入口点,例如应用主页(Home页)。...假设用户在主页跳转到其他页面,运行多次操作后想返回到主页,假设不使用SingleTask模式,在点击返回过程中会多次看到主页,这明显就是设计不合理了。...Android应用在5s内无响应的话会导致ANR(Application Not Response),这就要求开发者必须遵循两条法则:1、不能阻塞UI线程,2、确保在UI线程中访问Android UI...Application通常作为工具类来使用,Application中在onCreate()方法里去初始化各种全局变量数据是一种比较推荐做法,但是如果你想把初始化时间点提前到极致,也可以去重写attachBaseContext

5.9K70
领券