android 进程的优先级
2013-10-06 14:13:31 来源:WEB开发网核心提示:作用:延迟指定时间,再将r对象发送至主线程执行,android 进程的优先级(7),12.6.2.示例@Overridepublic void onClick(final View v) {switch (v.getId()) {case R.id.download:new Thread() {public void
作用:延迟指定时间,再将r对象发送至主线程执行。
12.6.2.示例
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.download:
new Thread() {
public void run() {
CommonUtils.timeConsuming(1);
Runnable action = new Runnable() {
@Override
public void run() {
mTextView.setText("下载完成");
}
};
//v-当前的按钮对象,延迟1秒发送action对象由主线程执行
v.postDelayed(action, 1000);
}
}.start();
break;
case R.id.update:
new Thread() {
public void run() {
CommonUtils.timeConsuming(8);
Runnable action = new Runnable() {
@Override
public void run() {
mTextView.setText("更新新闻完成");
}
};
/v-当前的按钮对象,延迟3秒发送action对象由主线程执行
v.postDelayed(action, 3000);
}
}.start();
break;
12.7.post总结
12.7.1.概述
Android提供了post方法,将Runnable对象(当作消息中的第一参数)发送至消息对列,然后由Looper将消息对列中的消息交给主线程执行。如此,就可以在Runnable.run中编写修改UI的代码。但要注意:不要在run方法中编写耗时操作的代码。耗时的代码要放在工作线程的run方法中运行。以下列出已介绍过的post的方法
1、runOnUiThread(Runnable):该方法对handler.post进行了封装。
2、View.post(Runnable):运行被选择的控件对象发送Runnable对象。
3、Handler.post(Runnable)
4、View.postDelayed(Runnable, long):延迟发送
5、Handler.postDelayed(Runnable, long):延迟发送
12.7.2.Handler.post与runOnUiThread的比较
1. Handler可以实现线程间消息通讯。
2. 在代码的可读性和性能(创建对象的个数)方面,Handler都更有优势。
12.8. AsyncTask更新UI
12.8.1.概述
前面我们采用的都是new一个线程对象,采用这种匿名线程的方式存在以下缺陷:
第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用程序的效率要低很多;
第二,线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。 另外,在工作线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。
为了解决这一问题,引入了AsyncTask。AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行, 这就有效地避免了使用Handler带来的麻烦。阅读AsyncTask的源码可知,AsyncTask是使用java.util.concurrent 框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。
AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p) ,在此方法中实现任务的执行工作,比如连接网络获取数据等。通常还应该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。
提示:AsyncTask一定要在主线程中创建实例。
AsyncTask定义了三种泛型类型 Params,Progress和Result。
(1)Params 启动任务执行的输入参数,比如HTTP请求的URL。
(2)Progress 后台任务执行的百分比。
(3)Result 后台执行任务最终返回的结果,比如String。
12.8.2.常用方法
AsyncTask 的执行分为四个步骤,每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。
12.6.2.示例
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.download:
new Thread() {
public void run() {
CommonUtils.timeConsuming(1);
Runnable action = new Runnable() {
@Override
public void run() {
mTextView.setText("下载完成");
}
};
//v-当前的按钮对象,延迟1秒发送action对象由主线程执行
v.postDelayed(action, 1000);
}
}.start();
break;
case R.id.update:
new Thread() {
public void run() {
CommonUtils.timeConsuming(8);
Runnable action = new Runnable() {
@Override
public void run() {
mTextView.setText("更新新闻完成");
}
};
/v-当前的按钮对象,延迟3秒发送action对象由主线程执行
v.postDelayed(action, 3000);
}
}.start();
break;
12.7.post总结
12.7.1.概述
Android提供了post方法,将Runnable对象(当作消息中的第一参数)发送至消息对列,然后由Looper将消息对列中的消息交给主线程执行。如此,就可以在Runnable.run中编写修改UI的代码。但要注意:不要在run方法中编写耗时操作的代码。耗时的代码要放在工作线程的run方法中运行。以下列出已介绍过的post的方法
1、runOnUiThread(Runnable):该方法对handler.post进行了封装。
2、View.post(Runnable):运行被选择的控件对象发送Runnable对象。
3、Handler.post(Runnable)
4、View.postDelayed(Runnable, long):延迟发送
5、Handler.postDelayed(Runnable, long):延迟发送
12.7.2.Handler.post与runOnUiThread的比较
1. Handler可以实现线程间消息通讯。
2. 在代码的可读性和性能(创建对象的个数)方面,Handler都更有优势。
12.8. AsyncTask更新UI
12.8.1.概述
前面我们采用的都是new一个线程对象,采用这种匿名线程的方式存在以下缺陷:
第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用程序的效率要低很多;
第二,线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。 另外,在工作线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。
为了解决这一问题,引入了AsyncTask。AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行, 这就有效地避免了使用Handler带来的麻烦。阅读AsyncTask的源码可知,AsyncTask是使用java.util.concurrent 框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。
AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p) ,在此方法中实现任务的执行工作,比如连接网络获取数据等。通常还应该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。
提示:AsyncTask一定要在主线程中创建实例。
AsyncTask定义了三种泛型类型 Params,Progress和Result。
(1)Params 启动任务执行的输入参数,比如HTTP请求的URL。
(2)Progress 后台任务执行的百分比。
(3)Result 后台执行任务最终返回的结果,比如String。
12.8.2.常用方法
AsyncTask 的执行分为四个步骤,每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。
更多精彩
赞助商链接