Android学习--探究服务(二)
服务的基本用法
定义服务: 我们需要先创建服务,我们要使用就的利用一个类去继承它,然后重写它的几个方法,具体的我们看下面的代码:

我们重写了下面三个方法:
* onCreate() 服务创建的时候调用
* onStartCommand() 每次服务启动的时候调用
* onDestory() 服务销毁的时候调用
注意点: 首先要明白我们的onCreate()方法,我们说了它只会在服务被创建的时候调用,之后你开启服务的时候是不会再调用这个onCreate()方法了,没启动一次只会走 onStartCommand()方法,onDestory()是在服务被销毁的时候调用,下面我们再看看它的启动。
Intent startIntent = new Intent(this,MyService.class); // 启动服务
startService(startIntent);
// 停止服务
stopService(startIntent);
活动和服务之间的通信
首先我们的完善我们的服务类,在我们的服务类中添加 Binder 类,这个类会对我们想要在服务类中做的事做一个管理:
class MyService extends Service{
public MyService() {
}
private DownloadBinder downloadBinder = new DownloadBinder();
class DownloadBinder extends Binder{
public void startDownload(){
Log.d("DownloadBinder","startDownload");
}
public int getProgress(){
Log.d("DownloadBinder","getProgress");
return 0;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return downloadBinder;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
接着我们看在活动里面是怎样和这个服务类进行一个绑定的,具体的需要注意的地方我们都加了注释,就不在这里在重复,注意看注释就可以:
/*
*
* 首先我们创建一个ServiceConnection匿名类,在里面重写了onServiceConnected和onServiceDisconnected方法
* 这两个方法分别在活动和服务成功绑定的时候和解绑的时候调用
*
* */
private MyService.DownloadBinder downloadBinder;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
// 绑定成之后我们就可以随意的使用调用服务中的方法了
downloadBinder = (MyService.DownloadBinder) iBinder;
downloadBinder.startDownload();
downloadBinder.getProgress();
} @Override
public void onServiceDisconnected(ComponentName componentName) { }
}; // 绑定和解绑按钮事件来绑定和解绑
@Override
public void onClick(View view) { switch (view.getId()){
// 活动绑定服务
case R.id.bind_service: // 绑定的时候使用bindService方法,参数分别是 Intent 和 connection
Intent bindIntent = new Intent(this,MyService.class);
bindService(bindIntent,connection,BIND_AUTO_CREATE);
break; // 活动解绑服务
case R.id.unbind_service: unbindService(connection);
break; default:
break;
} }
服务的生命周期
我们通过下面的两张图说一下服务的生命周期:

Service生命周期流程图:

我们在通过下面的一个调用顺序来解读一下这生命周期:

服务使用的两个小技巧

可我们还有更简单的方法来做这件事,利用我们要说的 IntentService
Android学习--探究服务(二)的更多相关文章
- Android学习--探究服务(一)
什么是服务? 服务(service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖任何的用户界面,即使应用被切换到后台或者 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...
- Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment
你能够把fragment看成是activity的模块化部分.它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个"子activity&quo ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
- Android学习笔记(二)——探究一个活动
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...
随机推荐
- PowerShell收发TCP消息包
PowerShell收发TCP消息包 https://www.cnblogs.com/fuhj02/archive/2012/10/16/2725609.html 在上篇文章中,我们在PSNet包中创 ...
- [UOJ #52]【UR #4】元旦激光炮
题目大意:交互题,给你三个有序数组,长度分别为$n\_a,n\_b,n\_c$,都不超过$10^5$.三个函数$get\_a(i),get\_b(i),get\_c(i)$,分别返回$a_i,b_i, ...
- 洛谷P4592 [TJOI2018]异或 【可持久化trie树】
题目链接 BZOJ4592 题解 可持久化trie树裸题 写完就A了 #include<algorithm> #include<iostream> #include<cs ...
- angular的一些问题
引入第三方类库 1.安装依赖 npm install jquey --save 2.引入项目 在angular-cli.json "scripts": [ "../nod ...
- Install Rancher server
1.pre-requirement: sudo nmtui # sudo hostnamectl set-hostname <hostname> $ sudo hostnamectl se ...
- php getimagesize()函数获取图片宽度高度
//php自带函数 getimagesize() $img_info = getimagesize('tomener.jpg'); echo '<pre>'; print_r($img_i ...
- struts2学习问题(一)
一.struts2 Unknown tag (s:property). 解释:不识别标签 解决:这是sturts2的标签,导入相应的包<%@taglib prefix="s" ...
- HDU1232 畅通工程---(经典并查集应用)
http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory ...
- 【uva11855-求长度为1到n的相同子串出现的次数】sam
题意:求长度为1到n的相同子串出现的次数,输到小于2为止. 题解: 用sam做. 建机,算right集合,然后用r[i]更新长度为step[i]的子串出现次数,然后ans[i]=maxx(ans[i] ...
- [bzoj4034][HAOI2015]树上操作——树状数组+dfs序
Brief Description 您需要设计一种数据结构支持以下操作: 把某个节点 x 的点权增加 a . 把某个节点 x 为根的子树中所有点的点权都增加 a . 询问某个节点 x 到根的路径中所有 ...