WEB开发网
开发学院手机开发Android 开发 Android 下的多线程 阅读

Android 下的多线程

 2010-04-19 16:12:00 来源:WEB开发网   
核心提示:Looper.myLooper (),并且这个函数还要在我们perpare之后调用才能得到正确的Looper,Android 下的多线程(4),但是他这里用了一个这样的什么东东 getLooper,不知道它是如何实现的?这里有一个大概的思路,这后,我们子线程已经创建,我们在子线程的的prepare之后调用 myLoop
Looper.myLooper (),并且这个函数还要在我们perpare之后调用才能得到正确的Looper,但是他这里用了一个这样的什么东东 getLooper,不知道它是如何实现的?

这里有一个大概的思路,我们在子线程的的prepare之后调用 myLooper ()这个方法,然后保存在一个成员变量中,这个getLooper就返回这个东西,但是这里会碰到多线程的一个很突出的问题,同步。我们在父线程中调用 mAlbumArtWorker.getLooper(),但是想要这个返回正确的looper就必须要求我们的子线程运行了prepare,但是这个东西实在子线程运行的,我们如何保证呢?

我们看Google是如何实现的?

private class Worker implements Runnable {

private final Object mLock = new Object();

private Looper mLooper;

/**

* Creates a worker thread with the given name. The thread

* then runs a {@link android.os.Looper}.

* @param name A name for the new thread

*/

Worker(String name) {

Thread t = new Thread(null, this, name);

t.setPriority(Thread.MIN_PRIORITY);

t.start();

synchronized (mLock) {

while (mLooper == null) {

try {

mLock.wait();

} catch (InterruptedException ex) {

}

}

}

}

public Looper getLooper() {

return mLooper;

}

public void run() {

synchronized (mLock) {

Looper.prepare();

mLooper = Looper.myLooper();

mLock.notifyAll();

}

Looper.loop();

}

public void quit() {

mLooper.quit();

}

}

我们知道,一个线程类的构造函数是在主线程中完成的,所以在我们的 Worker的构造函数中我们创佳一个线程,然后让这个线程运行,这一这个线程的创建是指定一个 Runnabl,这里就是我们的Worker本身,在主线程调用 t.start();,这后,我们子线程已经创建,并且开始执行work的run方法。然后下面的代码很艺术:

synchronized (mLock) {

上一页  1 2 3 4 5  下一页

Tags:Android 线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接