在其他线程Android中运行的runnables队列

时间:2011-07-18 00:16:38

标签: java android multithreading thread-safety

该代码将帮助我解释我的问题:

public class TestHandlerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    new  Thread(){
        public void run(){
            for (int i=0;i<20;i++){
                handler.post(run);
            }
        }
    }.start();
}

Handler handler=new Handler(){

};

Runnable run = new Runnable(){
    public void run(){
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("TAG", "Message processed");
    }
};
}

这样新线程就可以在主线程中处理由处理程序提供的请求。 我需要做的恰恰相反。 UI线程启动请求,这些请求由另一个线程顺序提供(顺序很重要),并且在每个请求结束时不需要通知UI线程。 有些要点对此非常重要:请愿书有3个参数(int,int,boolean),它们在数据库中进行更改,并由用户与UI的交互生成,因此它们不会同时启动 提前致谢

1 个答案:

答案 0 :(得分:2)

一种选择是使用它来制作你的主题:http://developer.android.com/reference/android/os/HandlerThread.html

这将创建一个具有自己的消息队列和循环的线程。您可以创建一个Handler来在线程上运行工作,如下所示:

HandlerThread handlerThread = new HandlerThread("My Handler");
handlerThread.start();
Handle myHandler = new Handler(handlerThread.getLooper());

这确实要求线程完成的所有工作都是通过发送消息并通过处理程序在其上调度Runnables来完成的。