OVE*_*ONE 4 java multithreading android android-asynctask android-activity
这是一个我不知道如何去做的.基本上我有一个ASyncTask类,它在后台照常开展业务.完成后我想做些什么.现在,在你跳到前面说"只使用onPostExecute()"之前,这是一个问题.我需要运行的方法是在activity而不是Task类.
我看到它的方式,我有两个选择.
CustomTask task = new CustomTask();
task.execute(passedParams);
//when(task.execute is finished)
{
doX();
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以这样做,因为它非常简单,让我检查任务何时完成,而不必经常轮询活动和getStatus()活动.我不认为我会幸运,但如果有人有办法,那就太好了
将活动作为参数传递给ASyncTask.这很麻烦,我不喜欢使用它,但除了那个和对象参考,我不知道它是否会工作
CustomTask task = new CustomTask();
task.execute(passedParams,MyActivity);
Run Code Online (Sandbox Code Playgroud)
然后在Tasks onPostExecute中,我可以让它调用MyActivity.doX();
第三种方法是将asynctask作为活动本身的私有类,但我真的想将它分开.可重复性和什么不 -
有什么想法吗?
总结一下,在task.execute完成后需要doX().任何想法都赞赏.
好的,我知道我在这里.我一直在想新的解决方案.可以从任何位置调用的类方法或静态方法.
public class ProfileSettings extends Activity
{
public static void doX()
{
//Logic...
}
}
Run Code Online (Sandbox Code Playgroud)
来自AsyncTask
MyActivity.doX();
Run Code Online (Sandbox Code Playgroud)
选项B应该有效,有时是一个不错的选择,但有时候我会使用匿名类.当您从活动中调用它时:
CustomTask task = new CustomTask() {
@Override
protected void onPostExecute(Long result) {
super.onPostExecute(result);
MyActivity.this.doX();
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4397 次 |
| 最近记录: |