【问题标题】:Android Application->onCreate() not called when reopen app重新打开应用程序时未调用 Android Application->onCreate()
【发布时间】:2015-07-02 10:25:16
【问题描述】:
public class MyApplication extends Application{

@Override
public void onCreate()
{
    super.onCreate();
    Log.d("*******:", "onCreate");
}}

public class MainActivity extends ActionBarActivity{

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}}

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

第一次打开这个应用程序时,MyApplication 中的 onCreate() 方法已被调用,但是当我完成 Activity(按返回按​​钮),然后重新打开应用程序时,我发现 MyApplication 中的 onCreate() 方法没有被调用了。

奇怪的是,如果我在系统后台“杀死”应用程序,然后重新打开它,我发现可以再次调用 onCreate() 方法。

我不知道为什么,我想在用户重新打开我的应用程序时获得操作,有人可以帮忙吗?谢谢!

【问题讨论】:

  • 我认为您需要添加日志报告,以便我们更好地了解您的问题。
  • @Biswajit 很简单的demo,我觉得log报告可能没必要。我的描述可能不是很清楚,我会编辑我的问题描述。还是谢谢。
  • 你需要了解activity生命周期...
  • 也许,不确定,这会告诉你一点:developer.android.com/reference/android/app/Application.html
  • @MahaKhan 我知道 Activity 生命周期,我不是要求那个,而是 Application 的生命周期。

标签: android oncreate


【解决方案1】:

您的MyApplication 正在扩展Application。因此,由于应用程序在内存中,因此在重新打开应用程序时不调用 onCreate 是有道理的

如果它正在扩展Activity,则在重新打开时将调用onCreate

【讨论】:

  • 好的,我明白了,非常感谢:)
【解决方案2】:

OnCreate 仅用于初始创建,因此应该只调用一次。 onCreate() 方法执行基本的应用程序启动逻辑,在 Activity 的整个生命周期内应该只发生一次。

初始化过程会占用大量资源,为避免这种情况,活动一旦创建就永远不会完全销毁,但在后台对用户不可见,因此一旦将其带回前台,就不会发生重新初始化强> .

onCreate() 执行完成后,系统会快速连续调用 onStart() 和 onResume() 方法。

如果您希望多次完成任何处理,则应将其放在其他位置,例如在@OnResume 方法中。

protected void onRestart() {
  Log.d("*******:", "onRestart");
    super.onRestart();

}

protected void onResume() {
    super.onResume();
  Log.d("*******:", "OnREsume");
}

希望你能理解!!

【讨论】:

  • 现在我明白了,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多