[英]Android testing - Activity is destroyed unexpectedly while an AsyncTask is executing
当我运行应用程序本身时,没有这种行为AsyncTask
完成执行后,它将返回到我的MainActivity(从AsyncTask
的第一位置开始)。
但是,在我的测试用例中,MainActivity只是突然暂停,停止和销毁,而AsyncTask
只是在短时间内开始执行。
如何确保活动等待AsyncTask
对其进行回调,就像我的应用程序的实际行为一样?
02-21 17:23:13.063: W/MainActivity(16685): onCreate
02-21 17:23:13.133: W/MainActivity(16685): refreshRequired
02-21 17:23:13.233: W/MainActivity(16685): user is not regitered
02-21 17:23:13.233: W/MainActivity(16685): onStart
02-21 17:23:13.233: W/MainActivity(16685): onResume
02-21 17:23:16.686: W/MainActivityFunctionalTest(16685): performing the button click action
02-21 17:23:17.227: W/MainActivity(16685): Submit button is clicked
02-21 17:23:17.377: W/Process(16685): doInBackground
02-21 17:23:17.377: W/RegistrationManager(16685): doRegistration
02-21 17:23:17.387: W/RegistrationManager(16685): sendJobRequest
02-21 17:23:17.487: W/RegistrationManager(16685): didOpenedAPDUConnection
02-21 17:23:17.507: W/MainActivity(16685): onPause
02-21 17:23:17.617: W/RegistrationManager(16685): sending HTTP request
02-21 17:23:17.617: W/MessageProcessor(16685): sending a HTTP request
02-21 17:23:17.627: W/HTTPRequest(16685): HTTPRequest.startAsynchronous timeout : 60000
02-21 17:23:17.627: W/HTTPRequest(16685): url is: ...
02-21 17:23:17.848: W/HTTPRequest(16685): HTTPRequest.readResponse RESP BODY = ca000000250104313030350218437573746f6d657220646f6573206e6f74206578697374210900000000
02-21 17:23:17.848: W/MessageProcessor(16685): requestFinished
02-21 17:23:17.858: W/RegistrationManager(16685): didFailedJobRequestWithResponseMsg
02-21 17:23:17.898: W/Process(16685): onPostExecute
02-21 17:38:29.057: W/MainActivity(17483): onStop
02-21 17:38:29.057: W/MainActivity(17483): onDestroy
我的测试课:
public class MainActivityFunctionalTest extends
ActivityInstrumentationTestCase2<MainActivity> {
public void testRegistrationFormIsSubmitted() {
final MainActivity mainActivity = (MainActivity) solo
.getCurrentActivity();
solo.assertCurrentActivity("current activity not main activity",
MainActivity.class);
final View submitBtn = solo.getView(R.id.btn_next);
assertNotNull(submitBtn);
Log.w(TAG, "performing the button click action");
solo.clickOnView(submitBtn);
}
}
主要活动
ImageButton submitBtn = (ImageButton) findViewById(R.id.btn_next);
submitBtn.setImageResource(R.drawable.btn_submit);
// View submitBtn = findViewById(R.id.btn_next);
submitBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.w(TAG, "Submit button is clicked");
sendActivation(v);
}
});
private void sendActivation(View v) {
process = new Processor(this, this.getApplicationContext());
process.execute();
}
处理器.java
public class Processor extends AsyncTask<Void, String, Void>{
@Override
protected Void doInBackground(Void... arg0)
{
Log.w(TAG, "doInBackground");
mManager.doRegistration();
return null;
}
}
protected Void doInBackground(Void... arg0)
您不应该进行任何UI更改,甚至不显示Toasts
它引发错误。
所以mManager.doRegistration();
如果您执行任何UI更改,都会引发错误,
相反,如果有任何UI更改,都可以在protected void onPostExecute()
使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.