生命周期测试:不使用onDestroy()重新启动

时间:2015-06-01 13:43:52

标签: android android-testing

如何在不调用onDestroy ()的情况下杀死并重新启动已测试的活动

Android系统可以在不调用onDestroy()的情况下杀死您的应用   (甚至没有在前蜂巢中调用onStop()),如

  

在极端情况下,系统可能会简单地杀死您的应用程序进程   没有调用活动的最终onDestroy()回调,所以它是   重要的是你使用onStop()来释放可能泄漏的资源   存储器中。

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

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

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);
    }
}

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

(如果您想对此进行评估,请转至Lifecycle Testing with Robotium: Killing and Restarting Activity以获取有关如何设置活动的说明)

中止行为可能是由于Robotium living inside the application

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

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

怎么做?

(如果此问题有任何改进,请编辑或   发表评论)

1 个答案:

答案 0 :(得分:1)

我不确定您的测试活动是什么意思。但是,如果要重新启动Activity,则以下代码应该可以正常工作。

解决方案1:

/**
 * 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);
}

解决方案2: 使用recreate

Activity方法

检查以下链接以获取更多详细信息

Source