安卓 多线程

来源:互联网 发布:linux从入门到精通 编辑:程序博客网 时间:2024/06/15 02:57

方法1:创建单独的线程

new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubDoingwork();}}).start();

方法2:利用线程池:

    private ExecutorService executorService = Executors.newFixedThreadPool(4);
上面是创建一个固定大小的线程池,这里面的线程不会被关闭,一旦有任务则会分配给线程,但是如果线程都在执行,则排队等候

    private ExecutorService executorService = Executors.newCachedThreadPool();
这样则是创建一个缓存的线程池,线程被创建之后不会立即被销毁,而是作为备用线程缓存在那里,当一个任务结束之后马上又有第二个任务,这个线程就会去执行第二个任务,省去了创建线程和销毁线程的步骤,节省开销


将任务投入线程池的方法:

executorService.submit(work);
其中的work是Runnable类

任务需要这样写:

Runnable work = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubDoingwork();}};



线程中操作UI的方法

方法之一是handler:

final Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg){super.handleMessage(msg);if(msg.what == 1){   UIWork();}}};
msg是为了区分不同的UI操作,比如点这个按钮就改变这个label,点那个按钮就改变那个图片,需要写不同的message

下面是线程中的操作:

Message message = new Message();message.what=1;handler.sendMessage(message);
这样的话UIWork()就会在主线程中完成,而不是在创建的线程中,因此不能在handler中执行耗时任务



0 0