子线程不可以更新UI吗?(2019-11-05)
这里文章基于Android 系统8.0及以上版本分析子线程更新UI并没有报错的原因,其它版本并没有出现这种情况可以参考这篇文章子线程能更新UI吗。经常看到文章说不要在子线程更新UI,不要在UI线程进行耗时操作。偶然间的尝试发现了一些奇怪的问题,先分析第一个问题子线程中可以更新UI吗?下面是我的代码:
这里文章基于Android 系统8.0及以上版本分析子线程更新UI并没有报错的原因,其它版本并没有出现这种情况可以参考这篇文章子线程能更新UI吗。经常看到文章说不要在子线程更新UI,不要在UI线程进行耗时操作。偶然间的尝试发现了一些奇怪的问题,先分析第一个问题子线程中可以更新UI吗?下面是我的代码:
Handler的介绍中出现最多的关键字,Looper,ThreadLocal,MessageQueue。
在工作线程的 handler#sendMessage 方法实际上是向主线程即UI线程的消息队列插入消息,通过ActivityThread初始化Looper对象,并通过Looper.looper方法循环查询消息队列的新消息。
下述代码根据 AppCompatActivity 及主题
parent="Theme.AppCompat.NoActionBar"
和midSdk 21
实现。
代码中设定,需要写在 setContentView() 之前:
1 | // 隐藏标题 |
需要说明一点 requestWindowFeature() 方法是指定主题为 parent="android:Theme.Black"
之类的Activity 时隐藏老式 ActionBar 标题栏内容。对于继承 AppCompatActivity 这个方法无效。如果继承 AppCompatActivity 的 Activity 需要隐藏标题栏,可以通过以下方法:
只有在与代码压缩(混淆)相配合使用时,资源压缩才能发挥作用。代码压缩器移除所有未使用的代码后,资源压缩器便可确定应用仍然使用的资源有哪些。当您添加包含资源的代码库时尤其如此 - 您必须移除未使用的库代码,使库资源变为未引用资源,因而可由资源压缩器移除。
Activity是用户与程序的窗口,使用前需要在清单文件中通过Actvity标签的android:name属性声明,Activity清单文件的属性配置可以参考官方说明。
在开发过程中,经常遇到在某个界面有多个文本框时,点击输入会出现软件盘遮挡输入框的情况,或者是类似在登录或注册页面可以输入信息,但是键盘遮挡登录注册按钮的问题,还有遮挡住输入框下面的输入框,用户必须手动收起键盘才可以继续输入的情况。本篇文章介绍如何处理这些问题,首先我们来介绍一下adjustSize和adjustPan属性。
1 | Request request = new Request.Builder() |
通过Request构建请求体,然后由 client 执行。这里 Request 默认请求类型是Get。注意这个是SynchronousGet是同步执行的。在Android UI线程直接运行会报错提示:==android.os.NetworkOnMainThreadException==。
RenderScript
是Android
平台上简单快速处理图片效果的脚本工具,Renderscript``基于C99(Ed. C 语言)
。使用前需要在Module
下build.gradle
文件中添加两行代码:
1 | defaultConfig { |
Update your browser to view this website correctly. Update my browser now