赵雅智_service生命周期
Android中的服务和windows中的服务是类似的东西,服务一般没实用户操作界面。它执行于系统中不easy被用户发觉,能够使用它开发如监控之类的程序。
服务的开发步骤
第一步:继承Service类
public class SMSService extends Service { }
第二步:在AndroidManifest.xml文件里的<application>节点里对服务进行配置:
<service android:name=".SMSService" />
Context.startService()或Context.bindService()
服务不能自己执行,须要通过调用Context.startService()或Context.bindService()方法启动服务。
这两个方法都能够启动Service。可是它们的使用场合有所不同。
- 使用startService()方法启用服务。调用者与服务之间没有关连。即使调用者退出了,服务仍然执行。
public class HelloActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
......
Button button =(Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(HelloActivity.this, SMSService.class);
startService(intent);
}});
}
} - 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出。服务也就终止,大有“不求同一时候生,必须同一时候死”的特点。
public class HelloActivity extends Activity {
ServiceConnection conn = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
}
public void onServiceDisconnected(ComponentName name) {
}
};
@Override public void onCreate(Bundle savedInstanceState) {
Button button =(Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(HelloActivity.this, SMSService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
//unbindService(conn);//解除绑定
}});
}
}
生命周期
Context.startService()生命周期
假设打算採用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
假设调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
假设是调用者自己直接退出而没有调用stopService的话,Service会一直在后台执行
仅仅能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy
详细细节见:http://blog.csdn.net/zhaoyazhi2129/article/details/32711481
Context.bindService()生命周期
假设打算採用Context.bindService()方法启动服务。在服务未被创建时。系统会先调用服务的onCreate()方法,接着调用onBind()方法。
这个时候调用者和服务绑定在一起,调用者退出了。系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。
假设调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
假设调用者希望与正在绑定的服务解除绑定,能够调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。
所以调用bindService的生命周期为:onCreate --> onBind(仅仅一次,不可多次绑定) --> onUnbind --> onDestory。
一但销毁activity它就结束。假设按home把它放到后台,那他就不退出。
详细细节见:http://blog.csdn.net/zhaoyazhi2129/article/details/32712073
补充:
在Service每一次的开启关闭过程中。仅仅有onStart可被多次调用(通过多次startService调用),其它onCreate。onBind,onUnbind,onDestory在一个生命周期中仅仅能被调用一次。
赵雅智_service生命周期的更多相关文章
- 赵雅智_Fragment生命周期
官网帮助文档链接: http://developer.android.com/guide/components/fragments.html 主要看两张图.和跑代码 一,Fragment的生命周 w ...
- 赵雅智_service电话监听2加接通电话录音
步骤: 创建CallStateService继承Service 取得电话服务 监听电话动作 电话监听的对象 没有电话时 停止刻录 重设 刻录完毕一定要释放资源 电话响铃时 从麦克风採集声音 内容输出格 ...
- 赵雅智:service_startService生命周期
案例演示 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...
- 赵雅智:service_bindService生命周期
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- 赵雅智_BroadcastReceiver
BroadcastReceiver 用于接收程序(包含用户开放的程序和系统内建程序)所发出的Broadcast intent 耗电量 开机启动 窃取别人短信 窃取别人电话 开发: 创建须要启动的Br ...
- 赵雅智_Swift(1)_swift简单介绍及类型
Swift 是 iOS 和 OS X 应用开发的一门新语言. 假设你有 C 或者 Objective-C 开发经验, Swift 的非常多内容都是你熟悉的. Swift 的类型是在 C 和 Objec ...
- 赵雅智_Fragment
当我们须要动态的多界面切换的时候,就须要将UI元素和Activity融合成一个模块. 在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就能 ...
- 赵雅智:android教学大纲
带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...
- 赵雅智_ContentProvider
ContentProvider介绍 ContentProvider是不同应用程序之间进行交换数据的标志API 也就是说:一个应用程序通过ContentProvider暴露自己的数据操作接口,那么无论该 ...
随机推荐
- [Codeforces 1053C] Putting Boxes Together
Link: Codeforces 1053C 传送门 Solution: 先推出一个结论: 最后必有一个点不动且其为权值上最中间的一个点 证明用反证证出如果不在中间的点必有一段能用代价少的替代多的 这 ...
- HDOJ(HDU) 3949 XOR
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- 【左偏树+延迟标记+拓扑排序】BZOJ4003-城池攻占
[题目大意] 有n个城市构成一棵树,除1号城市外每个城市均有防御值h和战斗变化参量a和v. 现在有m个骑士各自来刷副本,每个其实有一个战斗力s和起始位置c.如果一个骑士的战斗力s大于当前城市的防御值h ...
- 微信小程序 Session 失效
微信小程序 Session 失效 微信小程序,前端请求后端,中间多了个微信服务器,所以请求的流程就是 页面--微信服务器--目标服务器 这就导致了一个问题 session 每次请求都是一个新的会话 解 ...
- Problem D: 零起点学算法83——数组中删数
#include<stdio.h> int main(void) { int n,i,t,x,flag; while(scanf("%d",&n)!=EOF) ...
- [bzoj1006](HNOI2008)神奇的国度(弦图最小染色)【太难不会】
Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关 ...
- 通过scrapy内置的ImagePipeline下载图片到本地、并提取本地保存地址
1.通过scrapy内置的ImagePipeline下载图片到本地 2.获取图片保存本地的地址 1.通过scrapy内置的ImagePipeline下载图片到本地 1)在settings.py中打开 ...
- select标签中option内容加链接
1.Html页面代码 <select name="select" id="select" style="height: 25px; width: ...
- @MySQL为表字段添加索引
删除索引~ DROP INDEX `idx_dict_type` ON `article` 1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PR ...
- ylbtech-LanguageSamples-Delegates(委托)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Delegates(委托) 1.A,示例(Sample) 返回顶部 “委托”示例 本示例 ...