android 解决子线程进行UI操作

Android确实不允许在子线程中进行UI操作的,但我们有时必须在子线程里去执行一些耗时的任务,然后根据任务的执行结果来更新相应的UI控件。

Android提供了一套异步消息处理机制,可以解决子线程中进行UI操作的问题。

例子:

public class MainActivity extends AppCompatActivity {

    public static  final int UPDATE_TEXT = 1;

    private TextView textView;

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case UPDATE_TEXT:
                    textView.setText("chenzquan");
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Message message = new Message();
                        message.what = UPDATE_TEXT;
                        handler.sendMessage(message);
                    }
                }).start();

            }
        });
    }
}

还可以使用AsyncTask工具

AyncTask背后的实现原理也是基于异步消息处理机制

猜你喜欢

转载自www.cnblogs.com/zquan/p/9387871.html