Service学习——第二篇(模拟执行长时间任务)
2014-09-21 11:38
204 查看
Service学习——第二篇
在服务中执行长时间运行的任务
这个是在第一篇的代码之上进行的添加,其他代码请参考第一篇。
通过本篇实例,你可以明显发现,当你进行一个长时间的任务时,整个活动都是被暂停了5秒,没有响应(活动和服务在同一个线程上运行),这会给用户造成不好的体验。
所以我们要解决这个不好的体验,在下一篇中,将写到相关的解决办法。
MyService代码:
package com.example.myservice;
import java.net.URL;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class MyService extends Service{
publicMyService() {
//TODO Auto-generated constructor stub
}
@Override
publicIBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
returnnull;
}
@Override
publicint onStartCommand(Intent intent, int flags, int startId) {
//TODO Auto-generated method stub
//我们希望这个服务在被显示停止前一直运行,所以返回“粘性的”状态
Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show();
try{
intresult = DownloadFile(new URL("http://www.baidu.com/qinjianbo.pdf"));
Toast.makeText(this,"Downloaded" + result + " byte", Toast.LENGTH_LONG).show();
}catch (Exception e) {
//TODO: handle exception
}
returnSTART_STICKY;
}
//这个方法用来模拟下载一个程序
privateint DownloadFile(URL url) {
try{
Thread.sleep(5000);
}catch (Exception e) {
//TODO: handle exception
}
return1000;
}
@Override
publicvoid onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this,"Service Stopped", Toast.LENGTH_LONG).show();
}
}
在服务中执行长时间运行的任务
这个是在第一篇的代码之上进行的添加,其他代码请参考第一篇。
通过本篇实例,你可以明显发现,当你进行一个长时间的任务时,整个活动都是被暂停了5秒,没有响应(活动和服务在同一个线程上运行),这会给用户造成不好的体验。
所以我们要解决这个不好的体验,在下一篇中,将写到相关的解决办法。
MyService代码:
package com.example.myservice;
import java.net.URL;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class MyService extends Service{
publicMyService() {
//TODO Auto-generated constructor stub
}
@Override
publicIBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
returnnull;
}
@Override
publicint onStartCommand(Intent intent, int flags, int startId) {
//TODO Auto-generated method stub
//我们希望这个服务在被显示停止前一直运行,所以返回“粘性的”状态
Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show();
try{
intresult = DownloadFile(new URL("http://www.baidu.com/qinjianbo.pdf"));
Toast.makeText(this,"Downloaded" + result + " byte", Toast.LENGTH_LONG).show();
}catch (Exception e) {
//TODO: handle exception
}
returnSTART_STICKY;
}
//这个方法用来模拟下载一个程序
privateint DownloadFile(URL url) {
try{
Thread.sleep(5000);
}catch (Exception e) {
//TODO: handle exception
}
return1000;
}
@Override
publicvoid onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this,"Service Stopped", Toast.LENGTH_LONG).show();
}
}
相关文章推荐
- Service学习——第四篇 在服务中执行重复的任务
- Service学习——第三篇 异步执行任务
- Service学习——第五篇 使用IntentService在单独线程上执行异步任务
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)-asp.net关注
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(转)
- 关于按钮长时间按住多次执行任务
- asp.net利用多线程执行长时间的任务http://hi.baidu.com/lanxmail/blog/item/ccd6d5dcb8d65ea0cc1166a7.html
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)、(二)
- (原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- (原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)
- (原创)asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)_转
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(二)