这是之前碰到的一个面试题,准确的来说,子线程是可以创建hanlder的,但是如果你直接使用new thread来创建,代码会报loop的空指针错误,原因如下文,但是,Google给我们提供了HandlerThread,我们当然也可以利用HandlerThread中的思想在newThread里面实现子线程创建handler而不报错
默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的。这种情况属于子线程给主线程发消息,通知主线程更新ui...等,那么反过来,怎么才能让主线程给子线程发消息,通知子线程做一些耗时逻辑??
Android的消息机制遵循三个步骤:
1 创建当前线程的Looper
2 创建当前线程的Handler
3 调用当前线程Looper对象的loop方法
那么如果我想创建非主线程的Handler并且发送消息、处理消息,这一系列的操作我们应该怎么办?直接上代码:
public class ChildThreadHandlerActivity extends Activity {
private MyThread childThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler);
childThread = new MyThread();