子线程不可以更新UI吗

子线程不可以更新UI吗?(2019-11-05)

这里文章基于Android 系统8.0及以上版本分析子线程更新UI并没有报错的原因,其它版本并没有出现这种情况可以参考这篇文章子线程能更新UI吗。经常看到文章说不要在子线程更新UI,不要在UI线程进行耗时操作。偶然间的尝试发现了一些奇怪的问题,先分析第一个问题子线程中可以更新UI吗?下面是我的代码:

Android的Handler消息机制分析

Handler的介绍中出现最多的关键字,Looper,ThreadLocal,MessageQueue。

在工作线程的 handler#sendMessage 方法实际上是向主线程即UI线程的消息队列插入消息,通过ActivityThread初始化Looper对象,并通过Looper.looper方法循环查询消息队列的新消息。

Android设置全屏及沉浸式布局

下述代码根据 AppCompatActivity 及主题 parent="Theme.AppCompat.NoActionBar"midSdk 21实现。

对于非刘海屏幕而言有两种方式设置全屏

  1. 代码中设定,需要写在 setContentView() 之前:

    1
    2
    3
    4
    5
    6
    // 隐藏标题
    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    // 设置全屏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    //或者是通过设置DecorView#setSystemUiVisibility(int)
    //getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN)

    需要说明一点 requestWindowFeature() 方法是指定主题为 parent="android:Theme.Black"之类的Activity 时隐藏老式 ActionBar 标题栏内容。对于继承 AppCompatActivity 这个方法无效。如果继承 AppCompatActivity 的 Activity 需要隐藏标题栏,可以通过以下方法:

Android混淆手册

只有在与代码压缩(混淆)相配合使用时,资源压缩才能发挥作用。代码压缩器移除所有未使用的代码后,资源压缩器便可确定应用仍然使用的资源有哪些。当您添加包含资源的代码库时尤其如此 - 您必须移除未使用的库代码,使库资源变为未引用资源,因而可由资源压缩器移除。

第4章:Service知识点

1. 什么是Service

Service` 是一种可在后台执行长时间运行操作而不提供界面的应用组件,服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行,此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信(IPC)。例如,服务可在后台处理网络事务、播放音乐,执行文件I/O或内容提供程序进行交互。

第2章:BroadcastReceiver广播接收器

常见广播的使用场景:

  1. 同一app内有多个进程的不同组件之间的消息通信。
  2. 不同app之间的组件之间消息的通信。

有序广播和无序广播区别:

无序广播是通过context.sendBroadcast(Intent)方法发送的广播,不可拦截,当然发送的数据接受者是无法进行修改的。

有序广播是通过context.sendOrderBroadcast(Intent)方法发送的广播,可被拦截,而且接受者是可以修改发送的数据的。下一个接受者接受的数据是上一个接受者修改过的。

第1章:Activity基础知识点

1.1 Activity是什么?

Activity是用户与程序的窗口,使用前需要在清单文件中通过Actvity标签的android:name属性声明,Activity清单文件的属性配置可以参考官方说明

Android软键盘遮挡输入文本框问题

在开发过程中,经常遇到在某个界面有多个文本框时,点击输入会出现软件盘遮挡输入框的情况,或者是类似在登录或注册页面可以输入信息,但是键盘遮挡登录注册按钮的问题,还有遮挡住输入框下面的输入框,用户必须手动收起键盘才可以继续输入的情况。本篇文章介绍如何处理这些问题,首先我们来介绍一下adjustSize和adjustPan属性。

Android okhttp使用详解

Get 请求

1
2
3
4
5
6
7
Request request = new Request.Builder()
.url(url)
.build();
OkHttpClient client = new OkHttpClient();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}

通过Request构建请求体,然后由 client 执行。这里 Request 默认请求类型是Get。注意这个是SynchronousGet是同步执行的。在Android UI线程直接运行会报错提示:==android.os.NetworkOnMainThreadException==。

Android使用RenderScript处理图片

RenderScriptAndroid平台上简单快速处理图片效果的脚本工具,Renderscript``基于C99(Ed. C 语言)。使用前需要在Modulebuild.gradle文件中添加两行代码:

1
2
3
4
5
defaultConfig {
//略...
renderscriptTargetApi 24
renderscriptSupportModeEnabled true
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×