博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习三:线程操作
阅读量:4319 次
发布时间:2019-06-06

本文共 3814 字,大约阅读时间需要 12 分钟。

作为Android开发的组成部分,多线程的作用举足轻重,先来说说应用场景

1多线程使用场景

1.1正常使用中,经常有子线程来更新界面UI的需求,但是安卓不允许子线程更新UI

使用子线程处理UI,若线程需要较长的时间,势必造成UI没有反应,从而导致程序ANR(Application is not responding),使用户体验很差。

1.2多线程执行的需求

与其他编程开发一样,多线程可以增加程序的并发性,提高程序吞吐能力。

2多线程开发模式

2.1使用AsyncTask

AsyncTask是Android框架提供的异步处理的辅助类,含有多个回掉接口,功能相当强大

2.2使用Handler

通过消息队实现线程间的通信,与Looper配合使用,相对于AsyncTask,具有更高的可塑性。

3上代码

public class UIHandler extends Handler{    private EditText mEditText = null;;    public UIHandler(EditText editText){        mEditText = editText;    }    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        String value = String.valueOf(msg.obj);        if(mEditText!=null){            mEditText.setText(value);        }    }}

Handler子类的简单实现

public class UIAsyncTask extends AsyncTask
{ @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public boolean equals(Object o) { return super.equals(o); } @Override protected void finalize() throws Throwable { super.finalize(); } @Override public int hashCode() { return super.hashCode(); } @Override public String toString() { return super.toString(); } private EditText mEditText = null; public UIAsyncTask(EditText editText) { mEditText = editText; } @Override protected Integer doInBackground(Integer... param) { return param[0]++; } @Override protected void onPostExecute(Integer result) { mEditText.setText(String.valueOf(result)); }}

AsynTask子类的简单实现

public class MainActivity extends Activity {    private EditText mEditText = null;    private UIHandler mHandler = null;    private UIAsyncTask mAsyncTask = null;    private int mCount = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mEditText = (EditText) this.findViewById(R.id.txtTips);        mHandler = new UIHandler(mEditText);        mAsyncTask = new UIAsyncTask(mEditText);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    public void OnBtnHandlerClick(View v) {        Message msg = mHandler.obtainMessage();        msg.obj = mCount++;        mHandler.sendMessage(msg);    }    public void OnBtnUIThreadClick(View v) {        this.runOnUiThread(new Runnable() {            public void run() {                mEditText.setText(String.valueOf(mCount++));            }        });    }    public void OnBtnViewPostClick(View v) {        //只能被执行一次,否则多次调用时将会出现异常;        new Thread(new Runnable() {            public void run() {                mEditText.setText(String.valueOf(mCount++));            }        });    }    public void OnBtnAysncClick(View v) {        //只能被执行一次,否则多次调用时将会出现异常;        mAsyncTask.execute(mCount);    }}

MainActivity的内容

线程使用
Settings
Hello world!
线程的使用
等待线程返回信息
Handler方法
UIThread方法
ViewPost方法(只能执行一次)
AsyncTask方法(只能执行一次)

字符串定义

布局文件

4总结

时间比较仓促,写的不是很详细,哎!

转载于:https://www.cnblogs.com/supertonny/p/4413350.html

你可能感兴趣的文章
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决...
查看>>
MTK android 设置里 "关于手机" 信息参数修改
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
redis常见面试题
查看>>
导航控制器的出栈
查看>>
玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]
查看>>
iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置
查看>>
Delphi消息小记
查看>>
HNOI2016
查看>>
JVM介绍
查看>>