
地 址:上海市金山66号
电 话:19974139831
网址:dsesh.com
邮 箱:47283420@qq.com
Service是Android系统中一种(zhong)在(zai)后台运行的组件,它可以在没有用户交互的启动情况下执行长时间运行的任务,Service通常用于执行一些不需要与用(yong)户直接交互的启动操作(zuo),例如(ru)播放音乐、启动下载文件等,启动(dong)Service在Android系统中有很多种类型,启动如Started Service、启动Bound Service、启动Foreground Service和Background Service等。启动
1、通(tong)过(guo)Intent启动Service


这是启动最常用的(de)启动Service的方式,我们可以(yi)通过Intent来指定要启动的启动Service,并通过startService()方法来启动(dong)它,以(yi)下(xia)是启动一个简单的示(shi)例:

Intent intent = new Intent(this, MyService.class);startService(intent);
2、通过(guo)bindService()启动Service
bindService()方法可以(yi)让客户端与服务端建立绑定关系,从而(er)实现跨进程通(tong)信,当服务端准备就绪后,客户端会收到一个通知,这时,客户端可以调用startService()方(fang)法来启动(dong)服务,以下是一个简单的示例:
IBinder binder = serviceConnection.bindService(intent, connection, Context.BIND_AUTO_CREATE);if (binder != null) { startService(connection);} else { // 服务未准(zhun)备好,处理错误情况}3、通过Notification启动Service
我(wo)们希望在通知栏中显示一个按钮,当用户点击该按钮时启动(dong)Service,这时,我们可以使用Notification来实现,我们需要创建一个通知,并设置其启动行为的触发器为PendingIntent,将PendingIntent设置为通知的内容,通过(guo)NotificationManager发送通知,以(yi)下是一个简单的示例:
Intent intent = new Intent(this, MyService.class);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setContentTitle("My Service") .setContentText("Click to start") .setSmallIcon(R.drawable.ic_notification) .setContentIntent(pendingIntent) .setAutoCancel(true);NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);notificationManager.notify(1, builder.build());4、通过BroadcastReceiver启动Service
当接收到一个特定的广播时,我(wo)们可以启动一个Service,我(wo)们需要创建一个BroadcastReceiver,并在其onReceive()方法中启动Service,我们需要在AndroidManifest.xml文件中注册这个(ge)BroadcastReceiver,以(yi)下(xia)是(shi)一个简单的示例:
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, MyService.class); context.startService(serviceIntent); }}在AndroidManifest.xml文件中注册BroadcastReceiver:
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MY_ACTION" /> </intent-filter></receiver>1、通过stopSelf()方法停止Service
如果Service正(zheng)在执行一个任务,我们可以让它立即停止任务并退出,这时,我们可以调用stopSelf()方法来停止Service,以下是一个简单的示例:
MyService myService = new MyService();myService.stopSelf();2、通过stopService()方法停止Service
我们还可(ke)以使用stopService()方法来停止一个(ge)已(yi)经绑定的服务,以下是一个简单的示(shi)例:
Context context = getApplicationContext();ComponentName componentName = new ComponentName(context, MyService.class);context.stopService(componentName);
1、如(ru)何让Service在后台运行?
答:要让Service在后台运行,可以在AndroidManifest.xml文件中的application标(biao)签中(zhong)添加(jia)android:allowBackup属性和android:fullBackupOnly属性,这样,即使设备重启或恢复出厂设置,应用程序的数据也不会丢失,还需要在Service所在的Activity中添加以下代码:moveTaskToBack(true);,这样,当Activity被销毁时,Service会被暂停并进入(ru)后台运行状态,当Activity再次创建时,可以通过startActivityForResult()方法来恢复Activity的生命周期。