android 进程的优先级
2013-10-06 14:13:31 来源:WEB开发网核心提示:public final class CommonUtils {public static final String ACTION_RECEIVER="com.tarena.ACTION_RECEIVER";public static void timeConsuming(int n){for(in
public final class CommonUtils {
public static final String ACTION_RECEIVER="com.tarena.ACTION_RECEIVER";
public static void timeConsuming(int n){
for(int i=0;i<n;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
步骤2、创建MyReceiver.java类,该类继承自BroadcastReceiver类,代码如下所示:
public class MyReceiver extends BroadcastReceiver {
private static final String tag="MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"onReceiver");
CommonUtils.timeConsuming(15);
}
}
步骤3、以下是MainActivity.java类的代码,该代码负责发送广播,模拟下载的耗时操作,代码如下所示:
public class MainActivity extends Activity implements OnClickListener{
TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView=(TextView)findViewById(R.id.tv);
//实例化按钮对象
Button btnDownload=(Button)findViewById(R.id.btnDownload);
Button btnSendBraodcast=(Button)findViewById(R.id.btnSendBroadcast);
//注册按钮对象的单击事件
btnDownload.setOnClickListener(this);
btnSendBraodcast.setOnClickListener(this);
}
//实现按钮的单击事件
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnDownload://下载按钮
CommonUtils.timeConsuming(10);//模拟(耗时10秒的)下载
mTextView.setText("finished");
break;
case R.id.btnSendBroadcast://发送广播按钮
//发送广播
Intent intent=new Intent(CommonUtils.ACTION_RECEIVER);
sendBroadcast(intent);
mTextView.setText("finished");
break;
}
}
}
12.3.Message对象
12.3.1.概述
Message类用于存放消息,该类通常与Handler类配合使用。
12.3.2.常用属性
1、int arg1:存放一个int类型的数据。
2、int arg2:存放一个int类型的数据。
3、int what:存放一个int类型的数据。
4、Object obj:存放任意类型的对象。
12.3.3.示例代码
Message msg=new Message();
msg.what=1;
msg.arg1=100;
msg.obj=”hello”;
msg.obj=new Runnable();
12.4.用Handler更新UI
12.4.1.概述
由以上所述,在主线程中不宜执行耗时操作,因此,通常的耗时操作都放在其它线程中,Androidghi称这样的线程为work thread(工作线程)。但Android还规定:只有主线程才能修改Activity中的控件,其它线程不能修改。
解决以上问题有多种方法,本节介绍如何通过Handler类提供的方法解决工作线程不能直接修改UI的问题。
Handler修改主线程UI的思路:Handler对象通过在工作线程中发送消息,该消息发送至消息对列中,等待处理。
在主线程中从消息对列中接收消息,根据消息中的信息决定如何更新主线程中UI.
12.4.2.常用方法
1、sendEmptyMessage(int what);
作用:从work thead(工作线程)向主线程发送一个空消息。
public static final String ACTION_RECEIVER="com.tarena.ACTION_RECEIVER";
public static void timeConsuming(int n){
for(int i=0;i<n;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
步骤2、创建MyReceiver.java类,该类继承自BroadcastReceiver类,代码如下所示:
public class MyReceiver extends BroadcastReceiver {
private static final String tag="MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"onReceiver");
CommonUtils.timeConsuming(15);
}
}
步骤3、以下是MainActivity.java类的代码,该代码负责发送广播,模拟下载的耗时操作,代码如下所示:
public class MainActivity extends Activity implements OnClickListener{
TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView=(TextView)findViewById(R.id.tv);
//实例化按钮对象
Button btnDownload=(Button)findViewById(R.id.btnDownload);
Button btnSendBraodcast=(Button)findViewById(R.id.btnSendBroadcast);
//注册按钮对象的单击事件
btnDownload.setOnClickListener(this);
btnSendBraodcast.setOnClickListener(this);
}
//实现按钮的单击事件
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnDownload://下载按钮
CommonUtils.timeConsuming(10);//模拟(耗时10秒的)下载
mTextView.setText("finished");
break;
case R.id.btnSendBroadcast://发送广播按钮
//发送广播
Intent intent=new Intent(CommonUtils.ACTION_RECEIVER);
sendBroadcast(intent);
mTextView.setText("finished");
break;
}
}
}
12.3.Message对象
12.3.1.概述
Message类用于存放消息,该类通常与Handler类配合使用。
12.3.2.常用属性
1、int arg1:存放一个int类型的数据。
2、int arg2:存放一个int类型的数据。
3、int what:存放一个int类型的数据。
4、Object obj:存放任意类型的对象。
12.3.3.示例代码
Message msg=new Message();
msg.what=1;
msg.arg1=100;
msg.obj=”hello”;
msg.obj=new Runnable();
12.4.用Handler更新UI
12.4.1.概述
由以上所述,在主线程中不宜执行耗时操作,因此,通常的耗时操作都放在其它线程中,Androidghi称这样的线程为work thread(工作线程)。但Android还规定:只有主线程才能修改Activity中的控件,其它线程不能修改。
解决以上问题有多种方法,本节介绍如何通过Handler类提供的方法解决工作线程不能直接修改UI的问题。
Handler修改主线程UI的思路:Handler对象通过在工作线程中发送消息,该消息发送至消息对列中,等待处理。
在主线程中从消息对列中接收消息,根据消息中的信息决定如何更新主线程中UI.
12.4.2.常用方法
1、sendEmptyMessage(int what);
作用:从work thead(工作线程)向主线程发送一个空消息。
更多精彩
赞助商链接