DAY20:ANR程序无回应之简介

今天要介绍到的是ANR也就是程序无回应,我们有时候使用一些程序会遇到那种lag很久,最後却是无回应的状况,能解决问题的关键方法就是使用非同步执行来执行程序。
没有特别设计下,所有任务都会在Main Thread上执行,可以想像成假设今天我们的第一个任务卡关了,连带影响後面的任务进行,这时就会出现ANR,这时候我们就要用非同步执行的处理方式,将第一个卡关的任务放到Back Thread,等於分成两条线进行。

要写出最简单的Thread首先先呼叫Runnable()介面,将我们要执行的写在Runnable里头,再使用Thread.start()来启动。
产生的Background Thread不是UI Thread,因此Background Thread的任务需要操作画面时,就必须与UI Thread沟通,需要用到Handler类别,它是一种跨Thread的沟通机制,必须再加入其他程序码。

接着,要介绍的是AsyncTask类别,它可以方便执行非同步操作,简单地达成Handler跟Thread跟Messange的功能,我们须先定义整个流程中输出及输入的资料型态,一开始会先带三个标签<Int,Void,String>这三个分别依序代表输入的资料型态,更新的资料型态,输出的资料型态。
继续介绍AsyncTask的四种方法:
1.onPreExcute():会在一开始非同步执行时被执行,功能是初始化资讯,或保存一些变数在AsyncTask的区域变数之中。
2.doInBackgroung():唯一执行於新Thread的方法,也是唯一必须被实作的方法,执行於其中的方法会独立执行并且完成後回传。
3.onProgressUpdate():功能是监听doInBackgroung()的进度,可搭配ProgressBar来实现进度条。
4.onPostExecute():功能在於处理任务结束後的结果,对结果进行後续处理。


<<:  【Day20】Git 版本控制 - git tag

>>:  第四个范例-使用好用图形化介面软件执行口罩物件辨识

【C#】Hash Table

Hash Table是一种有key value的资料结构~ 我们能在Hash Table中存入一个v...

来做一个铁人赛倒数计时器吧!

前言 呼~铁人赛终於来到倒数一周的时刻了~ 参加铁人赛的大家都辛苦了! 为了振奋一下精神,今天来尝试...

Day_22: 让 Vite 来开启你的Vue 之 跨元件响应式资料的处理

Hi Dai Gei Ho~ 我是 Winnie ~ 在今天文章中,我们要来继续延伸 昨天文章的主题...

[Day 24] -『 GO语言学习笔记』- 复合型别 - 阵列(Array) (II)

以下笔记摘录自『 The Go Workshop 』。今天要继续讲一下阵列(Array)这个型别。 ...

予焦啦!RISC-V 外部中断机制

予焦啦!上一章,我们完成了基本的排程;至少,程序的流程不会再因为单一的执行绪需要睡眠或是为了取得某些...