- 浏览: 838228 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
写过一些android程序,但是android中的Service的组件却不曾用过,因此,对它也不甚了解,所以,今天写个小例子来学习如何使用Service。这其实也是我学习新东西的一个方法,对于陌生的东西,看书只是理论只是的了解,但是实际的情况如何,还是需要写些程序来测试,那样的理解更深刻。
测试目的:了解Service的生命周期,以及在startService和bindService时,Service如何响应。
程序界面如下:
1、编写Android Service需要基础Service类,并实现其中的onBind方法
/** * Android Service 示例 * * @author dev * */ public class ServiceDemo extends Service { private static final String TAG = "ServiceDemo" ; public static final String ACTION = "com.lql.service.ServiceDemo"; @Override public IBinder onBind(Intent intent) { Log.v(TAG, "ServiceDemo onBind"); return null; } @Override public void onCreate() { Log.v(TAG, "ServiceDemo onCreate"); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { Log.v(TAG, "ServiceDemo onStart"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v(TAG, "ServiceDemo onStartCommand"); return super.onStartCommand(intent, flags, startId); } }
2、在AndroidManifest.xml文件中声明Service组件:
<service android:name="com.lql.service.ServiceDemo"> <intent-filter> <action android:name="com.lql.service.ServiceDemo"/> </intent-filter> </service>
其中的intent-filter中定义的action是用来启动服务的Intent。
3、在需要service的地方通过Context.startService(Intent)方法启动service或者Context.bindService方法来绑定service。
具体测试代码如下:
public class ServiceDemoActivity extends Activity { private static final String TAG = "ServiceDemoActivity"; Button bindBtn; Button startBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bindBtn = (Button)findViewById(R.id.bindBtn); startBtn = (Button)findViewById(R.id.startBtn); bindBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { bindService(new Intent(ServiceDemo.ACTION), conn, BIND_AUTO_CREATE); } }); startBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { startService(new Intent(ServiceDemo.ACTION)); } }); } ServiceConnection conn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { Log.v(TAG, "onServiceConnected"); } public void onServiceDisconnected(ComponentName name) { Log.v(TAG, "onServiceDisconnected"); } }; @Override protected void onDestroy() { Log.v(TAG, "onDestroy unbindService"); unbindService(conn); super.onDestroy(); }; }
4、日志输出:
上面的截图是点击绑定服务时输出的。可以看出,只调用了onCreate方法和onBind方法,当重复点击绑定服务时,没有再输出任何日志,并且不报错。onCreate方法是在第一次创建Service时调用的,而且只调用一次。另外,在绑定服务时,给定了参数BIND_AUTO_CREATE,即当服务不存在时,自动创建,如果服务已经启动了或者创建了,那么只会掉调用onBind方法。
上面的截图是在多次点击启动服务时输出的。可以看出,在第一次点击时,因为Service还未创建,所以调用了onCreate方法,紧接着调用了onStartCommand和onStart方法。当再次点击启动服务时,仍然调用了onStartCommand和onStart方法,所以,在Service中做任务处理时需要注意这点,因为一个Service可以被重复启动。
这里说一下,平常使用多的是startService方法,可以把一些耗时的任务放到后台去处理,当处理完成后,可以通过广播来通知前台。
而onBind方法更多的是结合AIDL来使用,这样一个应用可以通过绑定服务获得的IBinder来拿到后台的接口,进而调用AIDL中定义的方法,进行数据交换等。
后面将来学习AIDL!
评论
@jjjssh 不同版本的android api可能会有所差异。这个示例是针对android2.3的 。
可以写个示例在手机上运行,观察具体的日志信息,来理解生命周期。
另外,在绑定服务时,给定了参数BIND_AUTO_CREATE,即当服务不存在时,自动创建,如果服务已经启动了或者创建了,那么只会掉调用onBind方法。
你的这段话,我有点迷糊。如果第二次点击"绑定服务"按钮的话,应该会再次调用bindService方法,按照你的说法,如果服务已经启动或则创建,哪么只会调用onBind方法,但实际中,没有再次打出“ServiceDemo onBind”的日志,请问我理解上有什么错误吗
http://download.csdn.net/detail/flyingsir_zw/7276553
http://download.csdn.net/detail/flyingsir_zw/7276553
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3167要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2717要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 6950好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2060java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1597java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3237java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4645在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4305何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 4980在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4129在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5062在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3700Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32679在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2107下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1649因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1380前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 134931、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12347老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 3958软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
android service 例子
android service 简单实例代码 . binder继承一个接口,实现方法。
android service的小例子,实现播放器服务的实现,在android studio上运行通过,适合初学android service的朋友
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是...
Android Servicedemo 本资源是一个Android Service小例子,可供初学着学习@!
1AndroidService 测本地的service 2AndroidServiceClient 测远端service
一个录音机程序,简单的实现了广播,service等功能
这是Pro Android学习系列中http service的例子源代码。
使用Android代码编写 Service(服务)的一个源码例子,这是一本Android专业教程中的一个例子,觉得挺简单,就分享给想学习Android应用开发的朋友们,希望对你的学习有所帮助。
android开机自动启动service例子 android开机自动启动service例子
android service音乐播放例子.rar
一个结合了用service获得GPS信息,并用service将gps写入sqlite的gps表里,并用service通过broadcast发送经纬度信息给activity接收,activity通过BroadcastReceiver接收到service发送过来的经纬度信息后,在activity...
一个android的播放器例子,主要描述了activity和service的Intent交互
Android说明Service生命周期的代码例子。用于演示Service组件从创建到销毁的完整生命周期,以及IntentService的使用例子。
android web service 例子源代码,可以作为技术收藏。
Android service类的应用及源码例子,通过Android service类创建一个音乐服务模块,演示service类的创建、启动和方法使用,以及Service生命周期的说明,该例子继承service 然后重写onStart播放音乐 重写onDestry停止...
android学习的小例子。包括activity,service,fragment,dialog等
NULL 博文链接:https://zhanglimijavaeye.iteye.com/blog/1881599