android 进程的优先级
2013-10-06 14:13:31 来源:WEB开发网核心提示:1、 onPreExecute();作用:当任务执行之前开始调用此方法,可以在这里显示进度对话框,android 进程的优先级(8),2、doInBackground(Params...);作用:在后台线程执行,执行耗时操作,Android系统会在适当时候回收该对象,方便下次取用,在执行过程中可以调用publicPro
1、 onPreExecute();
作用:当任务执行之前开始调用此方法,可以在这里显示进度对话框。
2、doInBackground(Params...);
作用:在后台线程执行,执行耗时操作。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。
提示:publicProgress()相当于Handler.sendmessage()方法
3、onProgressUpdate(Progress...);
作用:此方法在主线程执行,用于显示任务执行的进度。
4、onPostExecute(Result);
作用:此方法在主线程执行,任务执行的结果作为此方法的参数返回。
12.8.3.示例
用AsyncTask实现图-6效果,当单击dwonload按钮后,在进度条中显示模拟的下载进度,并在标签中显示进度的百分比。下载结束后显示download finised。
图-6a 图-6b
public class MainActivity extends Activity implements OnClickListener{
Handler mHandler;
ProgressBar mProgressBar;//声明进度条
TextView mTextView;//标签:显示进度的百分比和操作的结果
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化各控件
mProgressBar=(ProgressBar)findViewById(R.id.progressBar);
mTextView=(TextView)findViewById(R.id.tvMessage);
Button btnDownload=(Button)findViewById(R.id.btnDownload);
Button btnUpdate=(Button)findViewById(R.id.btnUpdate);
//注册按钮的单击事件
btnDownload.setOnClickListener(this);
btnUpdate.setOnClickListener(this);
}
//实现按钮的单击时间事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDownload:
//创建对象
MyAsyncTask myAsyncTask=new MyAsyncTask();
myAsyncTask.execute(null);//执行任务
break;
case R.id.btnUpdate:
break;
}
}
private class MyAsyncTask extends AsyncTask<URL, Integer, String>{
//在UI中执行,更新UI
@Override
protected void onProgressUpdate(Integer... values) {
mProgressBar.setProgress(values[0]);
if(values[0]<100){
mTextView.setText("progress="+values[0]+"%");
}
}
//现在work thread中执行耗时操作
@Override
protected String doInBackground(URL... params) {
for (int i = 0; i < 100; i++) {
publishProgress(i+1);//向onProgressUpdate发送消息
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "download finished";
}
//doInBackground结束后,执行本方法,result是doInBackground方法返回的数据
@Override
protected void onPostExecute(String result) {
mTextView.setText(result);
}
}
}
12.9. 软件开发术语
12.9.1性能
临时对象越多,垃圾回收(GC)的频率越高
GC占用CPU,CPU被占用时,无法响应用户的操作
用户感觉到卡,影响用户体验。
12.9.2资源池
存放一定数量的同样类型的对象,当程序需要使用时,可以从资源池中获取,使用完成,收回资源池。
等待下一次被使用。
示例:从资源池中获取Message对象。
Message msg=Message.obtainMessage();
提示:若之前没有创建过Message,则创建给对象。Android系统会在适当时候回收该对象,方便下次取用。
提示:解决性能问题的前提是不能影响功能。
作用:当任务执行之前开始调用此方法,可以在这里显示进度对话框。
2、doInBackground(Params...);
作用:在后台线程执行,执行耗时操作。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。
提示:publicProgress()相当于Handler.sendmessage()方法
3、onProgressUpdate(Progress...);
作用:此方法在主线程执行,用于显示任务执行的进度。
4、onPostExecute(Result);
作用:此方法在主线程执行,任务执行的结果作为此方法的参数返回。
12.8.3.示例
用AsyncTask实现图-6效果,当单击dwonload按钮后,在进度条中显示模拟的下载进度,并在标签中显示进度的百分比。下载结束后显示download finised。
图-6a 图-6b
public class MainActivity extends Activity implements OnClickListener{
Handler mHandler;
ProgressBar mProgressBar;//声明进度条
TextView mTextView;//标签:显示进度的百分比和操作的结果
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化各控件
mProgressBar=(ProgressBar)findViewById(R.id.progressBar);
mTextView=(TextView)findViewById(R.id.tvMessage);
Button btnDownload=(Button)findViewById(R.id.btnDownload);
Button btnUpdate=(Button)findViewById(R.id.btnUpdate);
//注册按钮的单击事件
btnDownload.setOnClickListener(this);
btnUpdate.setOnClickListener(this);
}
//实现按钮的单击时间事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDownload:
//创建对象
MyAsyncTask myAsyncTask=new MyAsyncTask();
myAsyncTask.execute(null);//执行任务
break;
case R.id.btnUpdate:
break;
}
}
private class MyAsyncTask extends AsyncTask<URL, Integer, String>{
//在UI中执行,更新UI
@Override
protected void onProgressUpdate(Integer... values) {
mProgressBar.setProgress(values[0]);
if(values[0]<100){
mTextView.setText("progress="+values[0]+"%");
}
}
//现在work thread中执行耗时操作
@Override
protected String doInBackground(URL... params) {
for (int i = 0; i < 100; i++) {
publishProgress(i+1);//向onProgressUpdate发送消息
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "download finished";
}
//doInBackground结束后,执行本方法,result是doInBackground方法返回的数据
@Override
protected void onPostExecute(String result) {
mTextView.setText(result);
}
}
}
12.9. 软件开发术语
12.9.1性能
临时对象越多,垃圾回收(GC)的频率越高
GC占用CPU,CPU被占用时,无法响应用户的操作
用户感觉到卡,影响用户体验。
12.9.2资源池
存放一定数量的同样类型的对象,当程序需要使用时,可以从资源池中获取,使用完成,收回资源池。
等待下一次被使用。
示例:从资源池中获取Message对象。
Message msg=Message.obtainMessage();
提示:若之前没有创建过Message,则创建给对象。Android系统会在适当时候回收该对象,方便下次取用。
提示:解决性能问题的前提是不能影响功能。
更多精彩
赞助商链接