基本介绍
- 当我们需要执行复杂的计算逻辑,网络请求等耗时操作时,服务器可能不会立即响应请求,如果不将这类操作放在子线程中运行,就会导致主线程被阻塞住,从而影响用户的使用体验
- 如果想要更新应用程序中的UI控件,则必须在主线程中进行,否则就会出现
android.view.ViewRootImpl$CalledFromWrongThreadException
异常
代码实践
- 有些时候,我们需要在子线程中执行一些耗时任务,再根据任务的执行结果来更新相应的UI控件,对此,Android提供了一套异步消息的处理机制,解决了在子线程中进行UI操作的问题,我们先来看看异步消息处理的使用方法,再来分析其中的原理
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.myapplication1.R;
import java.util.concurrent.TimeUnit;
public class EventHandlerActivity extends AppCompatActivity {
private static final int CALCULATE_KEY = 2024;
private Button calculateBtn;
private TextView resultTv;
private Handler myHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
if (msg.what == CALCULATE_KEY) {
resultTv.setText("Result: " + msg.obj);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState