开始活动
onPostExecute()
EndpointsTask
您的终端任务的应该是一个
public final class EndpointsTask extends AsyncTask {
private final Intent mUserProfileDisplayIntent;
private final WeakReference mActivityReference;
EndpointsTask(final Activity activity, final Intent userProfileDisplayIntent) {
mActivityReference = new WeakReference(activity);
mUserProfileDisplayIntent = userProfileDisplayIntent;
}
@Override
protected void onPostExecute(Void result) {
final Activity activity = mActivityReference.get();
if (activity != null) {
startActivity(mUserProfileDisplayIntent);
}
}
}
然后
@Override
public void onClick(View v) {
if(v.getId() == R.id.userDetailsCaptureButton) {
// make sure only one task can be launched
if (endPointsTask == null || endPointsTask.getStatus() != AsyncTask.Status.RUNNING) {
endPointsTask = new EndpointsTask(YourActivity.this);
endPointsTask.execute();
}
}
startActivity(userProfileDisplayIntent);
}
// always cancel AsyncTasks in onStop(). You don't want it to launch anything when minimized, do you?
@Override
protected void onStop() {
super.onStop();
if (endPointsTask != null && endPointsTask.getStatus() == AsyncTask.Status.RUNNING) {
endPointsTask.cancel();
}
}
不要将Context作为参数传递给任何线程,因为它可能导致泄漏。这也意味着内部类应该是静态的。 存储上下文作为弱引用(在当前示例中使用上下文的mActivityReference)