Android Service 笔记

 从运行模式来看,Android的服务组件没有运行在独立的进程或线程中,而是和Android其他组件一样运行在进程的主线程中。所以直接在服务组件中同步执行耗时操作,将会阻塞主线程。

   像Service的子类IntentService,完成构造函数和onHandleIntent(Intent intent)方法,然后就可以通过startService(intent)发送执行命令,IntentService接收到首个命令时,IntentService完成启动,并触发一个后台线程,然后将命令放入队列。IntentService会顺序执行这些命令,并同时为每一条命令在后台线程上调用onHandleIntent(intent)的方法。当执行完队列的所有命令后,服务也随即停止并被销毁。PS:IntentService是一种non-sticky服务。

   non-sticky服务:当服务自己认为已经完成任务时,会调用stopSelf()或者stopSelf(int)方法告诉Android任务已经完成,以结束服务。

   sticky服务:服务会持续运行,直到某个组件调用Context.stopService(Intent)让它停止。


Service的生命周期

一、Context.startService

    当首次启动服务时,会依次调用onCreate()和onStart(),如果服务已经被创建,再调用startService(intent)


就只会执行onStart()。Intent传递过来的参数可以在onStartCommand()方法中进行处理。主动结束时执行


stopSelf()方法,被动结束调用Context.stopService()方法,然后再执行onDestroy()。


二、Context.bindService


    如果客户端想持续连接服务,获取服务实例可以使用绑定服务这种方式。


    同样首次创建服务时,会调用onCreate(),然后onBind方法会构造一个IBinder对象返回给调用者,建立通信连


接,调用者通过重写ServiceConnection类中的onServiceConnected()方法可以获取此IBinder对象。通过


onUnBind解绑服务,然后再执行onDestroy()。绑定服务的组件在销毁前应解除绑定,否则会造成内存泄


露。


部分代码如下:


Service端

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class MyService extends Service {    
  2.     private static final String TAG = "MyService";    
  3.     private MyBinder mBinder = new MyBinder();   
  4.     // 创建一个Binder对象,通过onBinder返回给调用者,调用者再通过此对象得到该服务实例  
  5.     @Override    
  6.     public IBinder onBind(Intent intent) {    
  7.         Log.e(TAG, "start IBinder~~~");    
  8.         return mBinder;    
  9.     }    
  10.     @Override    
  11.     public void onCreate() {    
  12.         Log.e(TAG, "start onCreate~~~");    
  13.         super.onCreate();    
  14.     }    
  15.         
  16.     @Override    
  17.     public void onDestroy() {    
  18.         Log.e(TAG, "start onDestroy~~~");    
  19.         super.onDestroy();    
  20.     }    
  21.         
  22.         
  23.     @Override    
  24.     public boolean onUnbind(Intent intent) {    
  25.         Log.e(TAG, "start onUnbind~~~");    
  26.         return super.onUnbind(intent);    
  27.     }    
  28.         
  29.     //为服务创建一个公共方法,用于测试   
  30.     public String test(){    
  31.           System.out.println("test");  
  32.     }    
  33.         
  34.     public class MyBinder extends Binder{    
  35.         MyService getService(){    
  36.             return MyService.this;    
  37.         }    
  38.     }    
  39. }    


调用端:


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ServiceDemo extends Activity {    
  2.         
  3.     private ServiceConnection mServiceConnection = new ServiceConnection() {    
  4.           
  5.         public void onServiceConnected(ComponentName name, IBinder service) {    
  6.              
  7.             mMyService = ((MyService.MyBinder)service).getService();    
  8.             mMyService.test(); // 直接调用服务实例的公共方法  
  9.         }    
  10.             
  11.         public void onServiceDisconnected(ComponentName name) {    
  12.               
  13.                 
  14.         }    
  15.     };    
  16.       
  17.     public void onCreate(Bundle savedInstanceState) {    
  18.         super.onCreate(savedInstanceState);    
  19.         setContentView(R.layout.main);    
  20.         Intent i  = new Intent();    
  21.         i.setClass(ServiceDemo.this, MyService.class);    
  22.         mContext.bindService(i, mServiceConnection, BIND_AUTO_CREATE);    
  23.     }       
  24.         
  25. }    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为AI语言模型,我只能提供一些Android开发的基础知识和常用概念,希望对您有所帮助。 1. Android组成部分 Android操作系统由四个主要组成部分组成:应用程序、应用程序框架、系统运行库和硬件抽象层。 2. Activity Activity是Android应用程序中的一个组件,用于表示应用程序中的一个屏幕。Activity可以包含用户界面元素,如文本框、按钮和图像。 3. Intent IntentAndroid应用程序中的一个基本组件,用于在不同的组件之间传递数据。Intent可以用于启动Activity、启动服务、发送广播等。 4. 布局 布局是Android应用程序中用于定义用户界面的XML文件。布局文件定义了应用程序中的视图层次结构,包括文本框、按钮、图像等。 5. AndroidManifest.xml AndroidManifest.xml是Android应用程序中的一个必需文件,用于描述应用程序的基本信息。该文件包含应用程序的包名、应用程序的入口Activity、应用程序需要的权限等信息。 6. 生命周期 Android应用程序中的每个组件都有自己的生命周期,包括创建、启动、暂停和销毁。了解组件的生命周期可以帮助开发者更好地管理应用程序的资源。 7. 线程 Android应用程序中的线程用于执行长时间运行的操作,如下载文件或执行计算。但是,在主线程中执行长时间运行的操作会导致应用程序变得缓慢或停止响应,因此必须使用异步线程。 8. Service ServiceAndroid应用程序中的一种组件,用于在后台执行长时间运行的操作。与Activity不同,Service没有用户界面,可以在后台执行。 9. 广播 广播是Android应用程序中的一种机制,用于在不同组件之间传递消息。广播可以用于通知应用程序中的其他组件,例如当设备电池电量低时,应用程序可以发送广播通知其他组件。 10. 内存管理 内存管理是Android应用程序中的一个重要方面。Android应用程序必须管理内存以确保应用程序能够正常运行,并避免出现内存泄漏和内存溢出等问题。可以使用垃圾回收器、使用合适的数据结构、避免创建不必要的对象等方法来管理内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值