如何在不调用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);
}
}
注释掉的代码会停止并重新启动活动,但会调用所有onPause
,onStop
和onDestroy
。
(如果您想对此进行评估,请转至Lifecycle Testing with Robotium: Killing and Restarting Activity以获取有关如何设置活动的说明)
中止行为可能是由于Robotium living inside the application。
最好在没有onDestroy()
的情况下测试应用程序有关杀戮的行为,然后重新启动。
任何方法都可以做到这一点。
怎么做?
(如果此问题有任何改进,请编辑或 发表评论)
答案 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
方法
检查以下链接以获取更多详细信息