package org.lzm.android.handler;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;public class HandlerThreadDemo extends Activity implements OnClickListener{
private static final String TAG = "HandlerThreadDemo";
private Button startBtn = null;
private SeekBar bar = null;
HandlerThread mThread = new HandlerThread("handlerThread");
Handler mHhandler = new Handler(mThread.getLooper());这为什么有空,mThread.getLooper为什么不取到looper Message msg = mHhandler.obtainMessage();
Bundle bundle = new Bundle();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startBtn = (Button) findViewById(R.id.button1);
bar = (SeekBar) findViewById(R.id.seekBar1);
System.out.println();
} public void onClick(View v) {
if (v == startBtn) {
bar.setVisibility(View.VISIBLE);
mThread.start();
bundle.putInt("id", 1);
bundle.putString("name", "liziming");
msg.setData(bundle);
msg.sendToTarget();
System.out.println(bundle.getInt("id")+":"+bundle.getString("name"));
// Message msg = mHhandler.obtainMessage();
}
}
}08-01 01:52:39.401: ERROR/AndroidRuntime(424): FATAL EXCEPTION: main
08-01 01:52:39.401: ERROR/AndroidRuntime(424): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.lzm.android.handler/org.lzm.android.handler.HandlerThreadDemo}: java.lang.NullPointerException
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Looper.loop(Looper.java:123)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invokeNative(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invoke(Method.java:521)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at dalvik.system.NativeStart.main(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): Caused by: java.lang.NullPointerException
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Handler.<init>(Handler.java:157)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at org.lzm.android.handler.HandlerThreadDemo.<init>(HandlerThreadDemo.java:24)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.Class.newInstanceImpl(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.Class.newInstance(Class.java:1429)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): ... 11 more
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;public class HandlerThreadDemo extends Activity implements OnClickListener{
private static final String TAG = "HandlerThreadDemo";
private Button startBtn = null;
private SeekBar bar = null;
HandlerThread mThread = new HandlerThread("handlerThread");
Handler mHhandler = new Handler(mThread.getLooper());这为什么有空,mThread.getLooper为什么不取到looper Message msg = mHhandler.obtainMessage();
Bundle bundle = new Bundle();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startBtn = (Button) findViewById(R.id.button1);
bar = (SeekBar) findViewById(R.id.seekBar1);
System.out.println();
} public void onClick(View v) {
if (v == startBtn) {
bar.setVisibility(View.VISIBLE);
mThread.start();
bundle.putInt("id", 1);
bundle.putString("name", "liziming");
msg.setData(bundle);
msg.sendToTarget();
System.out.println(bundle.getInt("id")+":"+bundle.getString("name"));
// Message msg = mHhandler.obtainMessage();
}
}
}08-01 01:52:39.401: ERROR/AndroidRuntime(424): FATAL EXCEPTION: main
08-01 01:52:39.401: ERROR/AndroidRuntime(424): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.lzm.android.handler/org.lzm.android.handler.HandlerThreadDemo}: java.lang.NullPointerException
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Looper.loop(Looper.java:123)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invokeNative(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invoke(Method.java:521)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at dalvik.system.NativeStart.main(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): Caused by: java.lang.NullPointerException
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.os.Handler.<init>(Handler.java:157)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at org.lzm.android.handler.HandlerThreadDemo.<init>(HandlerThreadDemo.java:24)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.Class.newInstanceImpl(Native Method)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at java.lang.Class.newInstance(Class.java:1429)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
08-01 01:52:39.401: ERROR/AndroidRuntime(424): ... 11 more
要不然返回null
Since: API Level 1 This method returns the Looper associated with this thread. If this thread not been started or for any reason is isAlive() returns false, this method will return null. If this thread has been started, this method will block until the looper has been initialized. 不明白这个API?
是的mThread.start()之后到线程run方法结束isAlive才返回true,其他情况isAlive()返回false。
getLooper方法就返回null了,线程开启后如果looper没初始化getLooper也会被阻塞。