子线程没有Looper.prepare()创建Handler居然不报错

wmg_csdn 2017-10-31 10:29:07
下面这段代码,在子线程种创建了一个Handler,没有调用Looper.prepare(),然而没有报错。
并且,第一个test日志 Looper.myLooper()为null,第二个test日志 Looper.myLooper()不为null
难道new Handler()还能自动创建Looper?
PS: 在公司的电脑上运行不报错,同样的代码,在我的电脑上报错,公司和我的电脑jdk不一样,但sdk都是用的android-25,handler是android.os下面的,和jdk应该无关吧?
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initLooperAndThread();
}

private void initLooperAndThread(){
new Thread(){
@Override
public void run() {
Log.i("test", Looper.myLooper()+"");
MyHandler handler = new MyHandler();
Log.i("test", Looper.myLooper()+"");
}
}.start();
}

class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
}
...全文
14310 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
王能 2020-11-13
  • 打赏
  • 举报
回复
很有可能是有些手机定制的,在同一个手机上试试
Android师哥 2020-11-10
  • 打赏
  • 举报
回复
这有毒呀,构造方法也没有传入。怎么会不崩溃。沃日,讲道理。主线程不需要咱们自己调用是因为系统帮忙调用过了。这手机太强大了~~~
ink_s 2020-10-16
  • 打赏
  • 举报
回复 1
机器不同,或者Android系统版本不同 华为android10,打印出了下面信息,但是没保存没崩溃,APP正常运行 E/Handler: This is not main thread, and the caller should invoke Looper.prepare() and Looper.loop()called byandroid.os.Handler.<init>:122 com.test.MainActivity$MyHandler.<init>:82 com.test.MainActivity$1.run:76 <bottom of call stack> <bottom of call stack> <bottom of call stack> <bottom of call stack> <bottom of call stack> 另一个8.1的系统 报错崩溃 E/AndroidRuntime: FATAL EXCEPTION: Thread-2 Process: com.test, PID: 15199 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
xyzeng12 2020-10-16
  • 打赏
  • 举报
回复
你是在真机上测试的还是模拟器?可能真机上有优化
闫文敬 2020-10-16
  • 打赏
  • 举报
回复
看下面的源码,Handler的构造方法,肯定会抛出异常的,之所以你没有异常,应该是模拟器或者真机的特殊情况。
angel鹿 2017-11-02
  • 打赏
  • 举报
回复
报的是什么错?
YXTS122 2017-11-02
  • 打赏
  • 举报
回复
能把你的这个项目发到我的邮箱1444089871@qq.com我看看 。。。
江三木洛 2017-10-31
  • 打赏
  • 举报
回复
你确定在公司的代码是这样?
wmg_csdn 2017-10-31
  • 打赏
  • 举报
回复
引用 1 楼 xw13782513621 的回复:
你确定在公司的代码是这样?
确定,早上试了好几遍,代码和我测试的一模一样
godcok 2017-10-31
  • 打赏
  • 举报
回复
可能是你的机器太流弊了

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧