Android之Service组件
16lz
2021-01-26
一、定义
可长时间在后台运行并进行操作,是个没有界面的组件,可以被其他组件绑定,在进程间通信。二、创建
1、定义类继承Service1 public class ExampleService extends Service {2 @Override3 public IBinder onBind(Intent intent) {4 // TODO Auto-generated method stub5 return null;6 }7 }
2、清单文件中配置
1 <service android:name="com.example.service.ExampleService"></service>
三、服务的启动与停止
在其他组件调用startService()方法启动service 在其他组件调用stopService()方法停止servicestopSelf()//若调用此方法停止服务,无论其他执行是否结束,都会立即停止 stopSelf(startId)//若调用此方法停止服务,等到所有其他执行都结束才会停止服务
四、耗时操作
若要在服务中进行耗时操作,需要开启新的线程,因为service本身是在主线程中运行 若希望服务长期运行,内存不足的时候也不会被杀,可设置为前台进行服务startForeground()五、生命周期
1 /** 2 * 服务一旦创建,就不会被重复创建 3 * 此方法只会执行一次,若服务已开启,这个方法就不会再去执行 4 */ 5 @Override 6 public void onCreate() { 7 // TODO Auto-generated method stub 8 super.onCreate(); 9 }10 /**11 * 服务在停止的时候会调用这个方法12 */13 @Override14 public void onDestroy() {15 // TODO Auto-generated method stub16 super.onDestroy();17 }18 /**19 * 每一次开启服务的时候调用20 */21 @Override22 public int onStartCommand(Intent intent, int flags, int startId) {23 // TODO Auto-generated method stub24 return super.onStartCommand(intent, flags, startId);25 }26 /**27 * 每一次开启服务的时候掉用,但此方法已被废弃28 */29 @Override30 public void onStart(Intent intent, int startId) {31 // TODO Auto-generated method stub32 super.onStart(intent, startId);33 }
若是希望一开机便启动服务,需要通过广播接收者BootReceiver
1 public class BootReceiver extends BroadcastReceiver {2 3 @Override4 public void onReceive(Context context, Intent intent) {5 // TODO Auto-generated method stub6 Intent i=new Intent(context,ExampleService.class);7 context.startService(i);8 }9 }
清单文件中配置属性及权限
1 <receiver android:name="com.example.service.BootReceiver">2 <intent-filter >3 <action android:name="android.intent.action.BOOT_COMPLETED"/>4 </intent-filter>5 </receiver>
1 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
六、服务开启的两种方式
1、startService():服务一旦开启就与开启者(Activity)没什么关系了,Activity挂掉了,服务还是会在后台运行。
2、bindService():服务与Activity有关系,Activity挂掉,服务也会挂掉(不求同时生,但求同时死);但是服务挂掉,Activity不会挂掉。服务只能被显示的解除绑定一次,多次的解除绑定服务 应用程序会报异常
七、绑定服务
1、绑定服务调用服务里面方法的流程:
2、在activity 采用bindService方式开启服务...
3、写一个实现类 MyConn implements ServiceConnection
4、接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法
5、在service代码 实现 onBind方法 返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)
6、在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法
7、获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法
更多相关文章
- RecyclerView 中 item 点击事件的优化
- android获取各种路径的方法
- Android设置透明效果的三种方法
- Android使用SimpleAdapter
- Android(安卓)如何通过menu id来得到menu item 控件--binbinyang
- Android(安卓)平板 控制软键盘只弹出一半,自动盯着界面中EditText
- android 多界面应用程序退出的方法
- [forward]Android完全退出应用程序
- Android(安卓)7.1 双卡双待机器,首选网络类型设置 详细分析