【问题标题】:How to restart an Android Activity?如何重新启动 Android 活动?
【发布时间】:2013-04-15 05:36:33
【问题描述】:

我正在 Android 中创建一个应用程序,但是当我想更新一些数据时,我想重新启动我的 MainActivity。但是当我尝试重新启动我的应用程序时,它会崩溃。

我使用以下代码重新启动我的 Activity

 case R.id.update:
        admin = false;
        Intent intent1 = getIntent();
         finish();
         startActivity(intent1);    
        break;

我的日志是

04-22 12:28:10.444: E/AndroidRuntime(11867): FATAL EXCEPTION: main
04-22 12:28:10.444: E/AndroidRuntime(11867): java.lang.RuntimeException: Unable to start activity ComponentInfo{package_____________/package________.LauncherGridActivity}: java.lang.NullPointerException
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.os.Looper.loop(Looper.java:137)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread.main(ActivityThread.java:4424)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at java.lang.reflect.Method.invokeNative(Native Method)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at java.lang.reflect.Method.invoke(Method.java:511)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at dalvik.system.NativeStart.main(Native Method)
04-22 12:28:10.444: E/AndroidRuntime(11867): Caused by: java.lang.NullPointerException
04-22 12:28:10.444: E/AndroidRuntime(11867):    at com.___________.ApplicationManager.loadFilteredNames(ApplicationManager.java:228)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at com______.ApplicationManager.loadApplications(ApplicationManager.java:65)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at co___.LauncherGridActivity.onCreate(LauncherGridActivity.java:142)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.Activity.performCreate(Activity.java:4465)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-22 12:28:10.444: E/AndroidRuntime(11867):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
04-22 12:28:10.444: E/AndroidRuntime(11867):    ... 11 m

【问题讨论】:

  • Intent intent1 = new Intent(MainActivity.this,MainActivity.class);开始活动(意图1);完成();
  • 当您重新启动时,您的代码中的 loadFilteredNames() 方法有问题。发布该代码。
  • at com._______________.ApplicationManager.loadFilteredNames(ApplicationManager.java:228) 某些变量在此行为空。请确保在使用之前对其进行初始化。我使用上面相同的代码重新启动,它工作正常。所以也许问题出在空变量上。请发布上面指定的行
  • 我认为您的整个系统存在设计缺陷。您无需重新启动活动即可重新加载数据。这根本不是它的完成方式。
  • 正确,正如 Budius 先生所说,只更新你的数据,不要一次又一次地完成和启动Activity,它对于 Android 系统的任务繁重,它的这个进程活动管理器,任务管理器一切都会包括,找到另一种只更新数据的方法,如果你能告诉场景我们可以帮助你如何更新活动数据而不是重新创建它

标签: android application-restart android-launcher


【解决方案1】:

使用这个你可以重新开始活动。

Intent intent = getIntent();
finish();
startActivity(intent);

但根据您的要求,您需要使用 this.recreate(); 重新创建活动

【讨论】:

    【解决方案2】:

    这样试试

    Intent intent = new Intent(YourActivityName.this,YourActivityName.class);
    
    startActivity(intent);
    
    finish();
    

    【讨论】: