1 Service了解
主要作用处理一些好事的逻辑,或者执行某些需要长期运行的任务,必要的时候程序退出则Service可以在后台继续保持运行状态
2 Service生命周期 onCreate ,onStartCommand ,onStart , onDestroy
Service开启的时候依次执行 onCreate ,onStartCommand ,onStart
Service 调用stopService 时候执行 onDestroy
bindService方法执行Service中的onBind 方法
unbindService 方法执行Service中的onUnbind 方法
3 Service与线程使用与区别
1 )Service可以脱离Activity独立运行,2)可以运行在后台 3)与主线程是一个线程
有一些东西执行比较耗时,比如下载,但是我下载同时还要做其他事情,这时候使用Service虽然Activity退出了,但是程序依然运行,因为主线程与Service在
一个线程中,会阻碍主线程,这时候可以在Service中启动一个单独的子线程即可
总结:当一个任务需要独立Activity运行,这时候用Service ,Service比较耗时就可以单独启动Thread来使用
4 Service可以是前台Service,也可以做成后台不可见的Service
5 使用
1)类继承Service 2)在主的xml中进行注册 3)Activity开启与使用
代码:
1 Activity
public class ServiceMainActivity extends Activity { //为日志工具设置标签 private static String TAG = "MusicService"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_service_main); Log.d("ServiceMainActivity", "ServiceMainActivity thread id is " + Thread.currentThread().getId()); //输出Toast消息和日志记录 Toast.makeText(this, "ServiceMainActivity", Toast.LENGTH_SHORT).show(); Log.e(TAG, "ServiceMainActivity"); initlizeViews(); } private void initlizeViews(){ Button btnStart = (Button)findViewById(R.id.startMusic); Button btnStop = (Button)findViewById(R.id.stopMusic); Button btnBind = (Button)findViewById(R.id.bindMusic); Button btnUnbind = (Button)findViewById(R.id.unbindMusic); //定义点击监听器 OnClickListener ocl = new OnClickListener() { @Override public void onClick(View v) { //显示指定 intent所指的对象是个 service Intent intent = new Intent( ServiceMainActivity.this ,MusicService.class); switch(v.getId()){ case R.id.startMusic: //开始服务 startService(intent); break; case R.id.stopMusic: //停止服务 stopService(intent); break; case R.id.bindMusic: //绑定服务 bindService(intent, conn, Context.BIND_AUTO_CREATE); break; case R.id.unbindMusic: //解绑服务 unbindService(conn); break; } } }; //绑定点击监听 btnStart.setOnClickListener(ocl); btnStop.setOnClickListener(ocl); btnBind.setOnClickListener(ocl); btnUnbind.setOnClickListener(ocl); } //定义服务链接对象 final ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { Toast.makeText(ServiceMainActivity.this, "ServiceMainActivity onSeviceDisconnected" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "ServiceMainActivity onSeviceDisconnected"); } @Override public void onServiceConnected(ComponentName name, IBinder service) { Toast.makeText(ServiceMainActivity.this, "ServiceMainActivity onServiceConnected" ,Toast.LENGTH_SHORT).show(); Log.e(TAG, "ServiceMainActivity onServiceConnected"); MusicService.MyBinder bind = (MusicService.MyBinder)service; bind.startDownload(); Log.e(TAG, "bind====" +bind); } }; }
2 SERvice
public class MusicService extends Service { //为日志工具设置标签 private static String TAG = "MusicService"; //定义音乐播放器变量 private MediaPlayer mPlayer; public MyBinder myBinder = new MyBinder(); //该服务不存在需要被创建时被调用,不管startService()还是bindService()都会启动时调用该方法 @Override public void onCreate() { Toast.makeText(this, "MusicSevice onCreate()" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "MusicSerice onCreate()"); Log.d("MusicService", "MusicService thread id is " + Thread.currentThread().getId()); //后台的Service使用 mPlayer = MediaPlayer.create(getApplicationContext(),R.raw.ring); // 设置可以重复播放 mPlayer.setLooping(true); //前台的Service使用 Notification notification = new Notification(R.drawable.ic_launcher, "有通知到来", System.currentTimeMillis()); Intent notificationIntent = new Intent(this, ServiceMainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的内容", pendingIntent); startForeground(1, notification); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { Toast.makeText(this, "MusicSevice onStart()" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "MusicSerice onStart()"); mPlayer.start(); super.onStart(intent, startId); } public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, "MusicSerice onStartCommand()"); new Thread(new Runnable() { @Override public void run() { // 开始执行后台任务 } }).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Toast.makeText(this, "MusicSevice onDestroy()" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "MusicSerice onDestroy()"); mPlayer.stop(); super.onDestroy(); } //其他对象通过bindService 方法通知该Service时该方法被调用 @Override public IBinder onBind(Intent intent) { Toast.makeText(this, "MusicSevice onBind()" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "MusicSerice onBind()"); mPlayer.start(); return null; } //其它对象通过unbindService方法通知该Service时该方法被调用 @Override public boolean onUnbind(Intent intent) { Toast.makeText(this, "MusicSevice onUnbind()" , Toast.LENGTH_SHORT).show(); Log.e(TAG, "MusicSerice onUnbind()"); mPlayer.stop(); return super.onUnbind(intent); } //简历与activity的联系类 class MyBinder extends Binder { public void startDownload() { new Thread(new Runnable() { @Override public void run() { // 执行具体的下载任务 } }).start(); Log.d("TAG", "startDownload() executed"); // 执行具体的下载任务 } } }
3 xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Welcome to Andy's blog!" android:textSize="16sp"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="音乐播放服务"/> <Button android:id="@+id/startMusic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启音乐播放服务"/> <Button android:id="@+id/stopMusic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止音乐播放服务"/> <Button android:id="@+id/bindMusic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="绑定音乐播放服务"/> <Button android:id="@+id/unbindMusic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="解除 ——绑定音乐播放服务"/> </LinearLayout>
相关推荐
本示例"Service使用demo(Eclipse)"将深入讲解如何在Eclipse环境中集成并运用Service,同时结合BroadcastReceiver实现更灵活的应用场景。 首先,我们来详细了解Service的基本概念。Service主要分为两种类型:START...
Reporting Service 使用方法 Reporting Service 是 SQL Server 2008 中的一项功能强大且灵活的报表生成工具。它允许开发者快速创建专业的报表,满足业务需求。Reporting Service 提供了一个友好的设计器环境,允许...
以下是关于"Android Service使用注意事项1"的详细解释: 1. **注册Service** 在Android系统中,所有的组件(包括Service)都必须在`AndroidManifest.xml`文件中声明注册,以便系统知道它们的存在。没有注册的...
在Android开发中,Service是四大组件之一,它用于在后台执行...理解并熟练运用各种Service使用方式,能够帮助开发者实现丰富的后台功能,提升应用体验。通过ServiceDemo项目,初学者可以更直观地学习和实践这些知识点。
3. Activity绑定Service并使用Binder:在Activity中,我们可以通过bindService()方法绑定到Service,并在onServiceConnected()回调中获取到Binder对象。之后就可以调用Service中定义的方法了。 ```java public ...
android service使用的小demo 包括startService stopService bindService unbindService 两种开启、关闭service的小demo
本篇文章将深入探讨如何在Android中使用Service。 一、Service的基本概念 Service是Android系统中的一个特殊组件,它可以在后台运行,不与用户界面直接交互。Service可以启动(Start)或绑定(Bind),两种方式各有...
本示例将详细介绍如何使用 `Service`,特别是 `Start Service` 和 `Bind Service` 两种启动方式,以及如何实现 `Service` 与 `Activity` 之间的数据交互。 ### 1. Start Service `Start Service` 主要用于启动一个...
qt-solutions-master 源码和qtservice使用案例工程,包括qtservice,qtbrowserplugin,qtlockedfile,qtpropertybrowser,qtscriptclassic,qtsingleapplication,qtsoap,qtwinmigrate源码qtservice使用案例工程。...
本教程将通过"Service使用Demo"来详细介绍Service的基本用法及其应用场景。 1. **Service生命周期** Service的生命周期包括创建(onCreate())、启动(onStartCommand())、绑定(onBind())、停止(onStop())和...
本文将详细介绍"IOTService"的使用说明,包括其工具安装、串口服务器设备连接、功能特性以及测试指导。IOTService是一个专为物联网(IoT)设计的服务平台,它提供了丰富的功能,如串口服务器设备管理、邮件报警、远程...
本教程将深入探讨如何使用`Service`,以及在绑定的`Service`中发送`Notification`。 ### 1. 创建和启动Service 创建一个`Service` 需要继承 `android.app.Service` 类,并重写必要的生命周期方法,如 `onCreate()`...
本主题将深入探讨“同一应用同一进程内部Service的使用”,包括Service的基本概念、为何在同一进程中使用、如何创建与启动,以及相关注意事项。 ### Service基础 Service是一种没有用户界面的组件,它可以在后台...
这就是使用Messenger进行Activity和Service通信的基本流程。这种通信方式相对简单,适用于需要频繁、轻量级的消息传递。然而,如果需要传输大量数据或复杂的对象,可能需要考虑其他如AIDL(Android Interface ...
Linux运维-运维课程MP4频-05容器-72dockerswarm网络存储卷-编排部署service使用卷.mp4
Linux运维-运维课程MP4频-05容器-71dockerswarm网络存储卷-手动创建service使用卷.mp4
fontgen-loader, 从SVG图标自动生成 webfont web service使用 ! fontgen-loader - Bam,轻松 webfonts !你遇到了这个你有 4个图标,从FontAwesome到 19,也许你是eying的另一个图标,希望使用它们?真是一团糟行了...
依据Android官方文档,考虑到一些用户不能很好地使用Android设备,比如由于视力、身体、年龄方面的限制,造成阅读内容、触控操作、声音信息等方面的获取困难,因此Android提供了Accessibility特性和服务帮助用户更好...
"详解Android Service 使用时的注意事项" Android Service 使用时的注意事项是一个非常重要的 topic,对于 Android 开发者来说,了解 Service 的使用要点和注意事项是非常必要的。下面我们将详细介绍 Android ...