生命周期测试:在没有 onDestroy() 的情况下重新启动

Lifecycle Testing: Restarting without onDestroy()

如何在不调用 onDestroy() 的情况下终止并重新启动经过测试的 activity

android-系统可以在不调用 onDestroy() 的情况下终止您的应用程序 (甚至没有在 pre-Honeycomb 中调用 onStop()),如

In extreme cases, the system might simply kill your app process without calling the activity's final onDestroy() callback, so it's important you use onStop() to release resources that might leak memory.

(参见 http://developer.android.com/training/basics/activity-lifecycle/stopping.html#Stop

以下代码让应用程序停止,但不会重新启动 再次。它使用 Robotium 来检查 activity 是否启动,但任何方法都可以。

package com.testRestart;

import android.os.Bundle;
import android.test.ActivityInstrumentationTestCase2;
import com.robotium.solo.Solo;

public class RestartTest extends ActivityInstrumentationTestCase2<testactivity> {
    private Solo solo;

    public RestartTest() {
        super("com.testRestart", testactivity.class);
    }

    protected void setUp() throws Exception {
        solo = new Solo(getInstrumentation(), getActivity());
    }
    public void tearDown() throws Exception {
        solo.finishOpenedActivities();
    }

    public void testDestroyWithoutStop() {
        this.getInstrumentation().finish(23, new Bundle());// stops

        // getInstrumentation().runOnMainSync(new Runnable() {
        //  @Override public void run() {
        //        //    getActivity().finish();// does the same as recreate
        //      getActivity().recreate();
        //    }
        //});
        //setActivity(null);
        //getActivity();

        solo.waitForActivity(testactivity.class, 1000);
    }
}

注释掉的代码停止并重新启动 activity,但会调用所有 onPauseonStoponDestroy

(如果您想对此进行评估,请转至 了解有关如何设置活动的说明)

中止行为可能是由于 Robotium 生活在 申请.

最好测试一下应用程序在没有 onDestroy() 的情况下终止的行为,然后重新启动。

任何方法都可以做到这一点。

怎么做到的

(如果这个问题有什么需要改进的地方,请编辑或 发表评论)

我不确定您所说的已测试 Activity 是什么意思。但是如果你想重新启动你的 Activity 那么下面的代码应该可以正常工作。

解决方案一:

/**
 * Restarts the activity
 * @param context context
 */
public static void restartApp(final Context context){
    Intent restart = context
            .getPackageManager()
            .getLaunchIntentForPackage(context.getPackageName());
    restart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    context.startActivity(restart);
}

方案二: 使用 Activity

recreate 方法

查看以下内容link了解更多详情

Source