如果子线程的回调方法存在于被销毁的Activity中,或者现在不是堆栈顶部的Activity,会发生什么? 这个原因和例外吗?如果是这样,处理这类问题的最佳做法是什么?谢谢!
答案 0 :(得分:0)
如果要监视任务完成时间,可以使用Future类。
其他替代方法是在Handler中发布任务,如果您只想阻止他们使用RemoveCallback(Runnable r)
答案 1 :(得分:-1)
你也可以在一个非活动和一个简单的.java类的中心类中维护你的代码片段
答案 2 :(得分:-1)
你应该让你的线程像这样工作:
class Job extends Thread {
Activity activity;
boolean needsFinishing;
Job(Activity activity) {
this.activity = activity;
}
synchronized void detachActivity() {
activity = null;
}
synchronized void attachActivity(Activity activity) {
this.activity = activity;
if (needsFinishing) {
finished();
}
}
public void run() {
// do long running job
finished();
}
synchronized void finished() {
if (activity != null) {
needsFinishing = false;
activity.runOnUiThread(new Runnable() {
public void run() {
// do your stuff with the activity
}
});
} else {
needsFinishing = true;
}
}
}
活动:
class MyActivity extends Activity {
Job job;
void onCreate(Bundle bundle) {
job = (Job) getNonConfigurationInstance();
}
void onResume() {
if (job != null) {
job.attachActivity(this);
}
}
void onPause() {
if (job != null) {
job.detachActivity();
}
}
Object onRetainNonConfigurationInstance() {
return job;
}
// create and start your job somewhere between onCreate and onPause
}
这将确保线程仅在适当时访问活动。它也将处理方向变化。 注意,代码并不完美,因为我没有方便检查错误的java / android环境。