一.回调接口

public interface OnProgressListener {
void onProgress(int progress);
}

二.Service代码

public class MyService extends Service {

    private int progress = ;
private OnProgressListener onProgressListener; class DownLoadBinder extends Binder{
public MyService getService(){
return MyService.this;
}
} // 设置回调接口
public void setOnProgressListener(OnProgressListener onProgressListener){
this.onProgressListener = onProgressListener;
} @Nullable
@Override
public IBinder onBind(Intent intent) {
return new DownLoadBinder();
} @Override
public void onCreate() {
super.onCreate();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
} // 模拟下载
public void startDownload(){
new Thread(new Runnable() {
@Override
public void run() {
while (progress<){
progress += ;
// 通知调用方
if( onProgressListener != null ){
onProgressListener.onProgress(progress);
}
try {
Thread.sleep();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}).start();
} // 获取progress
public int getProgress(){
return progress;
} @Override
public void onDestroy() {
super.onDestroy();
Log.e("Service", "onDestroy");
}
}

三.Activity关键代码:

public class MainActivity extends Activity {

    private ProgressBar progressBar;
private MyService myService;
private int progress = ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); progressBar = (ProgressBar)findViewById(R.id.progressBar); Intent intent = new Intent(this, MyService.class);
// 标志位BIND_AUTO_CREATE是的服务中onCreate得到执行,onStartCommand不会执行
bindService(intent,conn, Context.BIND_AUTO_CREATE);
} protected void myClick(View v){
if( v.getId() == R.id.btn ){
myService.startDownload();
} if( v.getId() == R.id.btn2 ){
unbindService(conn);
}
} @Override
protected void onPause() {
super.onPause();
} @Override
protected void onStop() {
super.onStop();
} @Override
protected void onDestroy() {
unbindService(conn);
super.onDestroy();
} ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myService = ((MyService.DownLoadBinder)service).getService(); // 回调接口
myService.setOnProgressListener(new OnProgressListener() {
@Override
public void onProgress(int progress) {
progressBar.setProgress(progress);
}
});
} @Override
public void onServiceDisconnected(ComponentName name) { }
};
}

最新文章

  1. .NET Core RC2/RTM 明确了时间表
  2. SQL周、日、月、年数据统计
  3. python基础整理笔记(九)
  4. 20145223《Java程序程序设计》第9周学习总结
  5. matlab 相关性分析
  6. 分布式系列七: zookeeper简单用法
  7. 系统管理--配置Gitlab
  8. 傻瓜学编程之block_1
  9. 分布式锁(一) Zookeeper分布式锁
  10. 10.1-uC/OS-III任务堆栈空间
  11. python-flask-wtforms组件流程源码
  12. C++ 关于MFC List Control 控件的使用事项 原创
  13. cyclone iv中DDR2的本地接口时序
  14. C#编程(四十一)----------用户定义的数据类型转换
  15. java常用类总结
  16. 去n的第一个出现的1
  17. 2018-2019-1 20189218《Linux内核原理与分析》第五周作业
  18. (并查集 建立关系)Parity game -- POJ -1733
  19. 『转』市售热门可穿戴式“活动追踪器 Tracker”导购指南
  20. Selective Search for Object Recognition

热门文章

  1. linux 内核库函数 【转】
  2. centos7部署nagios
  3. pythontips(2):hasattr的用法
  4. 修改SVN路径
  5. 计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)
  6. 牛客小白月赛3 F 异或【区间交集】
  7. First Missing Positive -- LeetCode
  8. 每天一个linxu命令6之jps  查看java进程的端口
  9. INNO SETUP脚本向导创建的基本脚本
  10. Android简单的利用SoundPool进行播放铃声的实例代码