Android(安卓)实战之UI线程和Worker线程交互
16lz
2021-01-26
哈哈,博文取了个比较霸气的名字,大家不都喜欢这样忽悠人吗 呵呵!
好了,现在就是很简单的点击查询,然后这个查询有点花时间,不想见面出现假死现象,所以在另外的线程进行查询。
好了,代码在此:
package com.example.gulanfinddemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.Log;import android.widget.EditText;public class FindResActivity extends Activity {private MyHandler handler;private Boolean isKeywordFindBoolean = false;EditText resText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_find_res);resText = (EditText)findViewById(R.id.ResText);Log.v("FindResActivity threadId:", String.valueOf(Thread.currentThread().getId()));Intent intent = getIntent();String findReString;if (null != intent.getStringExtra(MainActivity.suraAyaFindStr)) {findReString = "按章节查询";isKeywordFindBoolean = false;}else {findReString = "按关键字查询";isKeywordFindBoolean = true;}Looper looper = Looper.myLooper();handler = new MyHandler(looper);new findContentThread(handler, findReString).start();//resText.setText(findReString);}private class MyHandler extends Handler{public MyHandler(Looper looper){super(looper);}public void handleMessage(Message msg){if (msg.what == 0) {Bundle bundle = msg.getData();resText.setText(bundle.getString("res"));}}}}
看出来了,重载了handler,在
handleMessage里会进行UI的更新。
package com.example.gulanfinddemo;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;public class findContentThread extends Thread{private String queryKeyString;private Handler handler;public findContentThread(Handler sendHandler,String string){queryKeyString = string;handler = sendHandler;}public void run(){Log.v("findContentThread threadId:", String.valueOf(Thread.currentThread().getId()));Message msgMessage = new Message();Bundle bundle = new Bundle();bundle.putString("res", queryKeyString);msgMessage.setData(bundle);msgMessage.what = 0;handler.sendMessage(msgMessage);super.run();}}
在这里用了扩展Thread的方法,处理之后handler会传回消息,之后就在handler里处理消息了。
然后里面打印了线程ID,从其中可以确定的确是在不同的线程里执行的。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 关于android消息处理的个人理解
- android中的jstack,看看线程都在干嘛
- android toast使用总结
- Android(安卓)面试之某些公司的面试题
- handler.post 运用
- Android的线程和线程池(一)
- android 之 Androidpn 消息推送总结
- Android开发历程_12(Handler的使用)