【问题标题】:Go back to parent activity if child activity crashes如果子活动崩溃,则返回父活动
【发布时间】:2014-05-27 06:55:53
【问题描述】:

在我的应用中有两个活动。活动 1 是 web 视图(== 主要活动)。 Activity 2 是原生 pdf 阅读器(子活动)。如果单击某些链接,则活动 1 通过意图打开活动 2。意图不使用任何特定标志。如果用户完成阅读 pdf,他将关闭活动 2。触发另一个意图,用户到达他开始的点(活动 1)。到目前为止没问题!

不幸的是,pdf 阅读器仍然有问题,有时会崩溃。 在这些情况下,我想要与上面提到的相同的行为:用户应该到达他开始的点(活动 1)。 在活动 2 中,我集成了一个实现 UncaughtExceptionHandler 接口的类,以捕获任何未捕获的异常并在 uncaughtException 方法中处理它。但是我在那里完成的最好的结果是活动 1 的娱乐。

我的目标无法实现吗?或者换句话说,如果一个子活动崩溃了,你能得到的最好的就是父活动的重新创建(== 主活动)?

编辑:

通过 Alexander 的回答,我找到了解决方案:

AndroidMainfest.xml:

<activity
        android:name="de.fcms.webapp.CoreActivity"
        android:label="@string/label_name"
        android:theme="@style/Theme.AppTheme"
        android:configChanges="orientation|screenSize"
        android:windowSoftInputMode="adjustResize"
        android:launchMode="singleTask" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="de.fcms.framework.module.PdfActivity"
        android:label="@string/setting_activity_name"
        android:parentActivityName="de.fcms.webapp.CoreActivity" 
        android:configChanges="orientation|screenSize"
        android:theme="@style/Theme.PdfActivity"
        android:process="de.fcms.framework.PdfActivity">
    </activity>

PdfActivity.java:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread thread, Throwable ex) {

            PdfActivity.this.getBackToMainActivity();
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    });

    //let's force a crash
    throw new OutOfMemoryError();
}

private void getBackToMainActivity () {

    getLogger().debug("getBackToMainACtivity");
    Intent intent = new Intent(this, CoreActivity.class);
    setResult(2001, intent);
    finish();
}

【问题讨论】:

  • activity2 完成后,如果你点击后退按钮,你可以移动到上一个活动?我的问题你能告诉我为什么 activity2 崩溃了吗?

标签: android android-intent exception-handling android-activity android-webview


【解决方案1】:

您可以尝试在单独的进程中运行 Activity2。只需在您的AndroidManifest.xml 中添加android:process

     <activity
         android:name=".Activity2"
         android:process="com.example.myapp.activity2"/>

请注意,进程名称必须至少有一个“.”。这就是您将在adb shell top 中看到的内容。 IE。它应该是独一无二的。所以我建议你使用应用程序 ID + 活动名称。

或者,您可以将流程设为专用于您的应用程序(这可能是您大部分时间想要的)。为此,您需要在进程名称前面加上冒号 (:)。在这种情况下,您不必担心全局名称的唯一性,可以使用较短的名称:

         android:process=":activity2"

阅读更多in the docs

【讨论】:

  • 谢谢,您的建议帮助了我。我现在达到了我的目标。
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多