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

Android 下的多线程

 2010-04-19 16:12:00 来源:WEB开发网   
核心提示:class EHandler extends Handler {public EHandler(Looper looper) {super (looper);}@Overridepublic void handleMessage(Message msg) {tv .setText((String)msg. obj );

class EHandler extends Handler {

public EHandler(Looper looper) {

super (looper);

}

@Override

public void handleMessage(Message msg) {

tv .setText((String)msg. obj );

}

}

//------------------------------------------------------

class myThread extends Thread{

private EHandler mHandler ;

public void run() {

Looper myLooper, mainLooper;

myLooper = Looper.myLooper ();

mainLooper = Looper.getMainLooper ();

String obj;

if (myLooper == null ){

mHandler = new EHandler(mainLooper);

obj = "current thread has no looper!" ;

}

else {

mHandler = new EHandler(myLooper);

obj = "This is from current thread." ;

}

mHandler .removeMessages(0);

Message m = mHandler .obtainMessage(1, 1, 1, obj);

mHandler .sendMessage(m);

}

}

}

完全是不知所云,一坨狗屎。我们来看,在上面的run里面

Looper myLooper, mainLooper;

myLooper = Looper.myLooper (); //很明显这个会返回空,因为你还没有 prepare,不会返回Looper。

mainLooper = Looper.getMainLooper ();

建议大家在看Looper的时候不要看高焕堂的书,感觉他也不是很懂,倒还把我搞糊涂了。讲了那么多,完全是他自己的理解,他自己的理解很是复杂,关键的是把简单的问题复杂化,并且复杂之后的东西还是错的。我们看看Goole Music App的源代码。

在MediaPlaybackActivity.java中,我们可以看一下再OnCreate中的有这样的两句:

mAlbumArtWorker = new Worker("album art worker");

mAlbumArtHandler = new AlbumArtHandler(mAlbumArtWorker.getLooper());

很明显这两句,是构建了一个子线程。并且这个子线程还是Looper的子线程,这里很牛逼的使用了 mAlbumArtWorker.getLooper()这个函数,因为我们知道,我们能够得到子线程的Looper的途径只有一个:就是在子线程中调用

上一页  1 2 3 4 5  下一页

Tags:Android 线程

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