关于android多线程问题

如果一个activity里面启动了N个线程请求网络数据,分别提供给不同view显示,可以通过一个handler来实现吗?还是需要创建n个handler来发送数据??

 Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thread并且start()是不行的,因为这违背了Android的单线程模型。那么如何用好多线程呢?总结一下:
     
事件处理的原则:所有可能耗时的操作都放到其他线程去处理。
  Android中的Main线......
答案就在这里:Android多线程问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

可以通过一个Harler来实现。在handler的handleMessage方法中更具不同线程返回来的Msg,what

Handle会把所有的消息放到一个消息队列,最后交给LOOP来分发的。

Handle会把所有的消息放到一个消息队列,最后交给LOOP来分发的。

Handle会把所有的消息放到一个消息队列,最后交给LOOP来分发的。

用一个handler就可以了,每个线程中,处理完网络数据之后就调用handler.sendEmptyMessage(int what),
每个线程中what值不一样,在handleMessage(Message msg)中判断msg.what就可以知道是从哪个线程发送的消息

可以用一个handler就好。
可以在每一个线程都用
message msg = new message();
msg.what = i; //i就是表示你每个线程的标号,可以随便定义,
handler.sendmessage(msg);
然后在handler方法里面,他有一个handlermessage()的方法,可以
switch(msg.what){
case 1:
new thread2().start(); //执行线程2

break;
case 2:
new thread3().start(); //执行线程3
break;
case 3:
new thread4().start(); //执行线程4
break;
}
最后在主线程中执行线程1,即new thread1().start();

可以在一个handler里实现,只需在handlermessage()里判定即可

可以1个,事先判断下,比如msg.what

1、创建线程的时候,把此线程处理结束后需要更新的viewId和请求网络数据的url都作为参数传入,线程结束后,通过Handler发送消息Message,Message可以包括what、arg1等参数,具体看其提供的静态obtain()方法。
把viewId设置成Message的what值,将从网络上获取到的内容作为arg1(此处为举例,需要根据实际情况决定),然后发送此消息。
更新view需要在UI线程,所以你的Handler需要在UI线程定义,因为Handler在其定义的线程中执行handleMessage()方法。
在handleMessage()方法中,根据Message的what和arg1来判断给那个view显示什么内容。

2、Android提供了一个抽象的异步任务类AsyncTask,此类的作用就是:在单独的线程中执行耗时任务(对应doInBackground()方法),结束后将结果返回到UI线程(对应onPostExecute()方法)。
那么自定义一个类继承AsyncTask,实现其中的doInBackground()和onPostExecute()方法,执行异步任务的时候传入viewId、url作为成员变量。