如何在不调用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
, onStop
和onDestroy
。
(如果你想评估这个,去生命周期测试与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
查看以下链接了解更多详情
源