2012-07-10 53 views
0

考虑从服务器获取数据并将其发布到UI列表视图中的情况,但这是一个正在进行的活动,它从不停止。android多线程和网络主线程异常;

taskA{ //fetches data over network 

if(!update) 
    fetch();//network operation 

} 

taskB{//using this data UI is updated at runtime just like feed. 

if(update) 
    show();//UI operation 
} 

任务A首次启动时,它完成taskB开始到那个时候一后正在睡觉,反之亦然,去,现在我面临的问题是:

  1. 两种操作都必须在工作线程
  2. 两个操作都在循环,直到活动还活着。
  3. 如果处理程序用于将UI操作发布到主线程,则taskB似乎停止。

任何人都可以请我建议一个设计,让这个工作?

回答

2

AsyncTask正在为你做这项工作。你可以将它作为Activity主类下的内部类。

http://developer.android.com/reference/android/os/AsyncTask.html

示例代码

private class YourTask extends AsyncTask<URL, Integer, String> { 
    protected String doInBackground(URL... urls) { 
     // Fetch Data (Task A) 
     return "Result"; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     // Show progress 
    } 

    protected void onPostExecute(String result) { 
     // Show UI after complete (Task B) 
    } 
} 
+0

这是一个很好的答案,但只有在用户旋转设备时活动不旋转才是正确的。 – 2012-07-10 09:33:53

+1

处理并不复杂。有关更具体的解决方案,请参阅http://stackoverflow.com/questions/2620917/how-to-handle-an-asynctask-during-screen-rotation。 – 2012-07-10 09:56:07

+0

如果我错了,请纠正我,但如果我使用asynctask进行重复操作(如taskA),则它会每次创建一个新线程以执行相同的操作。 – user1254554 2012-07-10 10:23:34

0

您还可以使用IntentService你可以检查一些sample code

版本的Android服务是轻量级的,但更复杂的设置。

AsyncTask非常容易,但不推荐,因为它有许多缺点和缺陷。 你也可以看看Loaders,但它不像AsyncTasks那么容易。

相关问题