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



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

android系统可以在不调用onDestroy()的情况下杀死你的应用程序(甚至不调用pre-Honeycomb中的onStop()),如

在极端情况下,系统可能会直接杀死你的应用进程没有调用活动的最终onDestroy()回调,所以它是重要的是使用onStop()来释放可能泄漏的资源记忆。

(见http://developer.android.com/training/basics/activity-lifecycle/stopping.html停止)

下面的代码使应用程序停止,但不重新启动一遍。它使用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);
    }
}

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

(如果你想评估这个,去生命周期测试与Robotium:杀死和重新启动活动的说明如何设置活动)

中止行为可能是由于Robotium生活在应用程序。

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

任何方法都可以。

怎么做呢?

如果这个问题有任何需要改进的地方,请编辑或留言)

我不确定你所说的测试活动是什么意思。但是如果你想重新启动你的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

查看以下链接了解更多详情

相关内容

  • 没有找到相关文章

最新更新