代码如下://ConnTestActivity.javapackage conn.test;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;public class ConnTestActivity extends Activity {
private Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString());
super.handleMessage(msg);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("01");
Handler our = null;
myThread myTr;
try {
myTr = new myThread();//.start();
myTr.start();
our = new Handler(myTr.getMyLooper());
if(myTr.getMyLooper() == null) System.out.println("nimei");
Message subMsg = new Message();//our.obtainMessage(1, "Message From Main!!");
subMsg.arg1 = 1;
subMsg.obj = "MessageFormMain";
our.sendMessage(subMsg);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
setContentView(R.layout.main);
}
}
//myThread.java
package conn.test;import android.os.Handler;
import android.os.Looper;
import android.os.Message;public class myThread extends Thread{
private Looper myLooper;
private MyHandler myHandler;
private String arg;//用于初始化Thread
private static final Object mLock = new Object();
//
//在主线程中调用
public myThread() throws InterruptedException
{
myLooper = null;
myHandler = null;
}
//子线程中初始化
public void run()
{
Looper.prepare();
synchronized (mLock)
{
myLooper = Looper.myLooper();
myHandler = new MyHandler(myLooper);
mLock.notifyAll();
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Message toMain = new Message();//mainHandler.obtainMessage(1, "Message From Sub!!");
toMain.obj = "fuck";
mainHandler.sendMessage(toMain);
System.out.println("03" + Thread.currentThread().getName());
Looper.loop();
}
public Handler getMyHandler()
{
synchronized(mLock)
{
while(myLooper == null || myHandler == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myHandler;
}
public Looper getMyLooper()
{
synchronized(mLock)
{
while(myLooper == null || myHandler == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myLooper;
}
}
class MyHandler extends Handler
{
public MyHandler(Looper looper)
{
super(looper);
}
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString());
Looper mainLooper = Looper.getMainLooper();
Handler mainHandler = new Handler(mainLooper);
Message toMain = mainHandler.obtainMessage(1, "Message From Sub!!");
mainHandler.sendMessage(toMain);
super.handleMessage(msg);
}
}
为什么我收不到主线程发给子线程的消息以及子线程发给主线程的消息??我是Android菜鸟,求指点啊!!
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;public class ConnTestActivity extends Activity {
private Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString());
super.handleMessage(msg);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("01");
Handler our = null;
myThread myTr;
try {
myTr = new myThread();//.start();
myTr.start();
our = new Handler(myTr.getMyLooper());
if(myTr.getMyLooper() == null) System.out.println("nimei");
Message subMsg = new Message();//our.obtainMessage(1, "Message From Main!!");
subMsg.arg1 = 1;
subMsg.obj = "MessageFormMain";
our.sendMessage(subMsg);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
setContentView(R.layout.main);
}
}
//myThread.java
package conn.test;import android.os.Handler;
import android.os.Looper;
import android.os.Message;public class myThread extends Thread{
private Looper myLooper;
private MyHandler myHandler;
private String arg;//用于初始化Thread
private static final Object mLock = new Object();
//
//在主线程中调用
public myThread() throws InterruptedException
{
myLooper = null;
myHandler = null;
}
//子线程中初始化
public void run()
{
Looper.prepare();
synchronized (mLock)
{
myLooper = Looper.myLooper();
myHandler = new MyHandler(myLooper);
mLock.notifyAll();
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Message toMain = new Message();//mainHandler.obtainMessage(1, "Message From Sub!!");
toMain.obj = "fuck";
mainHandler.sendMessage(toMain);
System.out.println("03" + Thread.currentThread().getName());
Looper.loop();
}
public Handler getMyHandler()
{
synchronized(mLock)
{
while(myLooper == null || myHandler == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myHandler;
}
public Looper getMyLooper()
{
synchronized(mLock)
{
while(myLooper == null || myHandler == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myLooper;
}
}
class MyHandler extends Handler
{
public MyHandler(Looper looper)
{
super(looper);
}
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString());
Looper mainLooper = Looper.getMainLooper();
Handler mainHandler = new Handler(mainLooper);
Message toMain = mainHandler.obtainMessage(1, "Message From Sub!!");
mainHandler.sendMessage(toMain);
super.handleMessage(msg);
}
}
为什么我收不到主线程发给子线程的消息以及子线程发给主线程的消息??我是Android菜鸟,求指点啊!!
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;public class ConnTestActivity extends Activity {
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString() + Thread.currentThread().getName());
super.handleMessage(msg);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("01");
Handler our = null;
myThread myTr;
try {
myTr = new myThread(this);//.start();
myTr.start();
our = myTr.getMyHandler();//our = new Handler(myTr.getMyLooper());
if(myTr.getMyLooper() == null) System.out.println("nimei");
Message subMsg = new Message();//our.obtainMessage(1, "Message From Main!!");
// Message ourMessage = myHandler.obtainMessage(1, "hehhee");
// ourMessage.sendToTarget();
subMsg.arg1 = 1;
subMsg.obj = "MessageFormMain";
if(our.sendMessage(subMsg))System.out.println("wokao ");
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
setContentView(R.layout.main);
}
}package conn.test;import android.os.Handler;
import android.os.Looper;
import android.os.Message;public class myThread extends Thread{
private Looper myLooper;
private MyHandler myHandler;
private String arg;//用于初始化Thread
private ConnTestActivity connTestActivity;
private static final Object mLock = new Object();
//
//在主线程中调用
public myThread(ConnTestActivity connTestActivity) throws InterruptedException
{
myLooper = null;
myHandler = null;
this.connTestActivity = connTestActivity;
}
//子线程中初始化
public void run()
{
Looper.prepare();
synchronized (mLock)
{
myLooper = Looper.myLooper();
myHandler = new MyHandler(myLooper);
mLock.notifyAll();
}
Handler mainHandler = connTestActivity.myHandler;//new Handler(Looper.getMainLooper());
Message toMain = new Message();//mainHandler.obtainMessage(1, "Message From Sub!!");
toMain.obj = "From Sub";
mainHandler.sendMessage(toMain);
Looper.loop();
}
public Handler getMyHandler()
{
synchronized(mLock)
{
while(myHandler == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myHandler;
}
public Looper getMyLooper()
{
synchronized(mLock)
{
while(myLooper == null)
{
try
{
mLock.wait();
}catch(InterruptedException e){}
}
}
return myLooper;
}
}
class MyHandler extends Handler
{
public MyHandler(Looper looper)
{
super(looper);
}
public void handleMessage(Message msg)
{
System.out.println(msg.obj.toString() + Thread.currentThread().getName());
Looper mainLooper = Looper.getMainLooper();
Handler mainHandler = new Handler(mainLooper);
Message toMain = mainHandler.obtainMessage(1, "Message From Sub!!");
toMain.sendToTarget();
super.handleMessage(msg);
}
}