开发者社区> 问答> 正文

关于Android线程与ui绘制的问题

当然知道只能在主线程更新UI,不过我有个非常费时的UI绘制操作(就是一堆自定义的view退出时保存在文件里,然后进入时读取文件绘制ui恢复界面,实测短板出现在view的绘制过程)

然后我一开始觉得只要View不添加就只是对象而已,然后尝试新开一个线程把这些控件new出来,然后在主线程addView,结果在我的平板(5.1.1)上完美运行,在手机(4.2.2)上闪退。

继续测试手机,新开一个线程,一个执行一句new一个edittext就崩溃,不过更加奇怪的是换成textview就正常。完全不明就里。

ps,大家有什么替代方法,也望不吝赐教,感激不尽

按照大家的提醒贴代码(实际的代码太长不便理解,我就写了一个TextView和EditText的,意思一样,而且方便大家理解。)

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                new TextView(mActivity);
            } catch (Exception e) {
                Log.d("debug", Log.getStackTraceString(e));
                return;
            }
            Log.d("debug", "成功地new了一个TextView");
            try {
                new EditText(mActivity);
            } catch (Exception e) {
                Log.d("debug", Log.getStackTraceString(e));
                return;
            }
            Log.d("debug", "成功地new了一个EditText");
        }
    }).start();
}

附上Logcat输出:

02-23 03:29:13.144 16364-16440/com.example.multicalc D/debug: 成功地new了一个TextView
 02-23 03:29:13.156 16364-16440/com.example.multicalc D/debug: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
 at android.os.Handler.(Handler.java:197)
 at android.os.Handler.(Handler.java:111)
 at android.widget.Editor$UserDictionaryListener.(Editor.java:3836)
 at android.widget.Editor.(Editor.java:192)
 at android.widget.TextView.createEditorIfNeeded(TextView.java:8475)
 at android.widget.TextView.(TextView.java:1114)
 at android.widget.EditText.(EditText.java:60)
 at android.widget.EditText.(EditText.java:56)
 at android.widget.EditText.(EditText.java:52)
 at com.example.multicalc.matrix.ui.WorkWindow$1.run(WorkWindow.java:174)
 at java.lang.Thread.run(Thread.java:856)

展开
收起
爵霸 2016-03-12 14:34:06 2183 0
1 条回答
写回答
取消 提交回答
  • 弱引用的方式,防止内存泄漏

    2019-07-17 19:00:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载