1.Android 子线程和UI的问题

来源:互联网 发布:手机怎么备份所有数据 编辑:程序博客网 时间:2024/06/05 06:58

真切感受到了,主线程不能尝试网络连接的意思。我一个类,类的构造函数里面我准备初始化socket,然后主Activity点击按钮,例化类,调试到例化类,直接跑飞了,都不能定位在哪一行了。。。然后就显示不好意思,我得退出了。

当然这个问题现在解决了,把socket建立放到了类的线程里面,但是现在退出好像有点问题,应该是没有正常退出线程吧。

先看解决办法,好吧,使用状态位,想想,C++的线程,好像也是这么处理的。

关闭还是关闭不了,好像阻塞了,先解决接受不了信息这个问题。查出来是,我在第二个java里需要访问Activity的资源,我用的是 ((EditText)activity.findViewById(R.id.Tmp_view)).setText(s);强行来,貌似报错了。然后我就传递个TextEdit,也不让我用text_view.setText(s);蛋疼


问题越来越神奇了,现在我传递MainActivity,然后呢,调用他的函数来设置EditText,也进去了报错了,我真是

现在改成再不行,我真的报警了

为啥呢,还是不行,走到中间这句话就不行了,放到同一个类下也不行

终于tn的好了,先总结如下。确定问题的一般步骤是,利用debug模式,去调试pad,然后比如出现了异常,logcat里面会显示错误,像我这:为啥没错误呢,因为错误的时候没截图,哈哈哈。。就这个意思

然后知道错误了,去百度这个错误,确定是子线程不能去修改主线程的UI(所以,我接收到数据后,调用显示函数,就是子线程想改ui)。知道问题后,百度起来就顺利多了

利用handler,来解决这个问题,直接贴代码了:

主线程端:

就是这样子,前面private Handler什么的就不截图了

子线程端:

忽略内容,我是把MainActivity传过来的,不知道好不好,应该是不好,因为这样,我还是会手贱的利用这个干吗干吗,不安全不是么,试试传handler吧

也是行的,好吧啦,传handler好了。

稍微加加注释,解决下一个问题吧。