服务的基本用法-2
来源:互联网 发布:mmdriver.inf修复软件 编辑:程序博客网 时间:2024/06/05 10:49
之前我们学习了启动服务和停止服务的方法,但是不知道你有没有发现,服务是在活动里启动的,但在启动了服务之后,活动与服务两者之间基本就没有什么关系了。确实如此,我们来分析一下。我们在活动里调用了startService()方法来启动MyService服务,然后MyService的onCreate()和onStartCommand()方法就会得到执行,之后服务就一直处于运行状态,具体运行的是什么逻辑,活动就不能控制了。那我们有没有什么办法可以把服务和活动给联系起来呢?当然可以,这就需要用到前面在创建MyService服务时,里面的onBind()方法了。
@Overridepublic IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented");}
比如说,我们希望在MyService服务里面提供一个下载的功能,然后在活动中可以决定何时开始下载,以及随时来查看下载的进度。实现这个功能的思路是创建一个专门的Binder对象来对下载功能进行管理。接下来我们来编辑MyService服务中的代码:
public class MyService extends Service { private DownloadBinder mBinder = new DownloadBinder(); class DownloadBinder extends Binder { //创建一个DownloadBinder类,来继承Binder类,对下载进行管理 public void startDownload(){ Log.d("MyService","startDownload executed"); } public int getProgress(){ Log.d("MyService","getProgress executed"); return 0; } } @Override public IBinder onBind(Intent intent) { return mBinder; }在这里,我们新建了一个DownloadBinder类,并继承自Binder类。然后在内部提供了两个模拟的开始下载和查看下载进度的方法。并分别加了一条监控日志。之后在MyService中创建了DownloadBinder的实例,最后在onBind()方法中返回了这个实例。这样MyService服务中的工作就全部完成了。现在我们再来编辑一下activity_main.xml布局文件中的代码:<Button android:id="@+id/bind_service" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Bind Service" android:textAllCaps="false" /><Button android:id="@+id/unbind_service" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Unbind Service" android:textAllCaps="false" />很简单,在原来的基础上,加了两个按钮,一个用于绑定活动和服务,一个用于取消绑定活动和服务。当一个活动和服务绑定了之后,就可以调用该服务里的Binder提供的方法了。现在我们再来编辑一下MainActivity中的代码逻辑:
首先再onCreate()方法中,我们获取了按钮的实例,并且为其添加了点击的事件。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private MyService.DownloadBinder downloadBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder) service; downloadBinder.startDownload(); downloadBinder.getProgress(); } @Override public void onServiceDisconnected(ComponentName name) { } };
接着,我们创建了一个匿名类ServiceConnection,里面重现了两个方法,这两个方法就是用来绑定和解除绑定服务和活动的。再onServiceConnected()方法中,我们通过下转型来获得DownloadBinder的实例,然后调用了里面开始下载和查看下载进度的两个方法。现在我们就可以在活动中来调用DownloadBinder中的任何public方法了。
最后,我们在onClick()方法中,来进行绑定和解绑。这个功能是在bindService按钮的点击事件里完成的。还是构建一个Intent对象,然后调用bindService()方法来进行绑定。同样的道理来进行解绑。现在我们来运行一下程序,点击bindService按钮看一下发生了什么。
我们看到了,首先,创建服务时,onCreate()方法得到了执行。然后startDownload()和getProgress()方法都执行了。说明我们确实已经将服务和活动进行了绑定。这样,我们就成功的将活动和服务进行了绑定。
0 0
- 服务的基本用法-2
- 服务的基本用法
- 服务的基本用法
- Service服务的基本用法
- 服务Service的基本用法
- 服务的基本用法-1
- 服务的基本用法-3
- ssh服务的基本用法
- android 学习笔记 服务的基本用法
- Android Service 服务的基本用法
- service的基本用法+远程服务
- android---(Service服务的基本用法)
- Android学习-服务的基本用法
- android服务基本用法
- AngularJS服务基本用法
- 安卓四大组件-服务-2_服务基本用法
- android学习十八(Service服务的基本用法)
- 【Android】安卓学习笔记之服务的基本用法
- Java反射机制详解
- html不换行显示
- 算法/最短路径/Bellman-Ford贝尔曼福特算法
- C++实验5
- Github全面详解-16Team小组
- 服务的基本用法-2
- h5学习笔记:vue 和 数据模拟
- html文字换行显示
- 最新破解版多多返利8.3源码分享
- html保留原始排版效果
- POJ1745Divisibility
- 实现网页同时只能有一个账号登录
- C++作业5
- html文字居中对齐显示