• Service组件


    标签:Andriod Service

    允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://52android.blog.51cto.com/2554429/499548

    Service组件可以看作是没有界面的Activity组件,二者地位相同。它是运行在系统后台的一种服务,一般处理耗时较长的操作,不与用户进行交互。和其他组件一样,Service组件同样需要在AndroidManifest.xml中声明,在<service>中可以添加过滤器指定如何如何访问该Service。

     

    1. <service android:name="MyService">  
    2.             <intent-filter>  
    3.      <action android:name="com.amaker.ch07.app.action.MY_SERVICE"/>  
    4.             </intent-filter>  
    5.         </service>  

      Service和整个应用程序在同一个进程和同一个线程中,并非单独的进程和线程。它的运行会阻塞其他操作。
      Service的用处有两点,其一是在后台运行耗时较长且不与用户进行交互的操作;其二是通过绑定,与其他进程进行通信。

    1. 创建Service
      首先需要定义一个继承于Service的类,然后覆盖其中的的方法即可。代码如下:

     

    1. public class MyService extends Service{  
    2.  
    3. // 可以返回null,通常返回一个有aidl定义的接口,必须实现  
    4. public IBinder onBind(Intent intent) {  
    5. Log.i("SERVICE""onBind..............");  
    6. Toast.makeText(MyService.this"onBind..............", Toast.LENGTH_LONG).show();  
    7. return null;  
    8. }  
    9. // Service创建时调用  
    10. public void onCreate() {  
    11. Log.i("SERVICE""onCreate..............");  
    12. Toast.makeText(MyService.this"onCreate..............", Toast.LENGTH_LONG).show();  
    13. }  
    14. // 当客户端调用startService()方法启动Service时,该方法被调用  
    15. public void onStartCommond(Intent intent, int flag, int startId) {  
    16. Log.i("SERVICE""onStart..............");  
    17. Toast.makeText(MyService.this"onStart..............", Toast.LENGTH_LONG).show();  
    18. }  
    19. // 当Service不再使用时调用  
    20. public void onDestroy() {  
    21. Log.i("SERVICE""onDestroy..............");  
    22. Toast.makeText(MyService.this"onDestroy..............", Toast.LENGTH_LONG).show();  
    23. }  
    24. }  

    2. 启动和停止Service
      一旦定义好一个Service,就可以在其他组件中启动并停止该Service了。代码如下:

     

    1. //启动Service
    2. // 创建Intent  
    3. Intent intent = new Intent();  
    4. // 设置Action属性  
    5. intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");  
    6. // 启动该Service  
    7. startService(intent);  
    8.  
    9.  // 停止Service
    10. // 创建Intent  
    11. Intent intent = new Intent();  
    12. // 设置Action属性  
    13. intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");  
    14. // 启动该Service  
    15. stopService(intent);  
    16.  

    3. 绑定一个已经存在的Service
      绑定Service和启动它的区别在于,绑定服务一般用于远程调用。如果服务没有被创建,首先会调用onCreate方法,但是不会调用onStrart方法,而是调用onBind返回客户端一个IBind接口。
      绑定服务的代码如下:

     

    1. // 连接对象  
    2. private ServiceConnection conn = new ServiceConnection() {  
    3. @Override 
    4. public void onServiceConnected(ComponentName name, IBinder service) {  
    5. Log.i("SERVICE""连接成功!");  
    6. Toast.makeText(MainActivity.this"连接成功!", Toast.LENGTH_LONG).show();  
    7. }  
    8. @Override 
    9. public void onServiceDisconnected(ComponentName name) {  
    10. Log.i("SERVICE""断开连接!");  
    11. Toast.makeText(MainActivity.this"断开连接!", Toast.LENGTH_LONG).show();  
    12. }  
    13. };  
    14.  
    15. // 綁定Service监听器  
    16. private OnClickListener bindListener = new OnClickListener() {  
    17. @Override 
    18. public void onClick(View v) {  
    19. // 创建Intent  
    20. Intent intent = new Intent();  
    21. // 设置Action属性  
    22. intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");  
    23.  
    24. // 绑定Service  
    25. bindService(intent, conn, Service.BIND_AUTO_CREATE);  
    26. }  
    27. };  
    28.  
    29.  
    30. // 解除绑定Service监听器  
    31. private OnClickListener unBindListener = new OnClickListener() {  
    32. @Override 
    33. public void onClick(View v) {  
    34. // 创建Intent  
    35. Intent intent = new Intent();  
    36. // 设置Action属性  
    37. intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");  
    38. // 解除绑定Service  
    39. unbindService(conn);  
    40. }  
    41. };  
    42.  
    43. }  


     

    本文出自 “我的Android开发志” 博客,请务必保留此出处http://52android.blog.51cto.com/2554429/499548

  • 相关阅读:
    方法的参数传递机制
    策略模式
    Factory(简单的工厂模式)
    java 跨域问题解决
    Map 转成Json字符串
    FastDFS 上传,删除文件
    MD5 密码加盐
    Java-图片压缩
    调用支付宝人脸采集查询图片Base64解码
    HttpClient工具类
  • 原文地址:https://www.cnblogs.com/xiaoxiaoboke/p/2088136.html
Copyright © 2020-2023  润新知