3-AIII--Service绑定服务基于接口调用方法
零、前言
1.上篇中MyBinder暴漏在外,亲自上阵,执行方法。Binder是连接者,能不出面尽量不出面,一个"电话(接口)"搞定的事就不要让他老人家(MyBinder)亲自跑一趟。面向接口,隐藏不必要的对象。
2.说服务怎能少得了音乐播放器,这里只写写伪方法,后面在多媒体篇会来完善。
一、代码实现
1.服务方法接口
/**
* 作者:张风捷特烈
* 时间:2018/8/25 0025:11:09
* 邮箱:1981462002@qq.com
* 说明:服务方法接口
*/
public interface IMService {
/**
* 播放音乐
*/
void playMusic();
/**
* 暂停音乐
*/
void pauseMusic();
/**
* 继续播放音乐
*/
void rePlayMusic();
}
2.音乐服务:MusicService
public class MusicService extends Service {
private static final String TAG = "MusicService";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MusicBinder();
}
private class MusicBinder extends Binder implements IMService {
@Override
public void playMusic() {
Log.e(TAG, "playMusic: ");
}
@Override
public void pauseMusic() {
Log.e(TAG, "pauseMusic: ");
}
@Override
public void rePlayMusic() {
Log.e(TAG, "rePlayMusic: ");
}
}
}
3.MusicActivity
public class MusicActivity extends Activity {
@BindView(R.id.btn_music_play)
Button mBtnMusicPlay;
@BindView(R.id.btn_music_stop)
Button mBtnMusicStop;
@BindView(R.id.btn_music_continue)
Button mBtnMusicContinue;
private ServiceConnection mConn;
private IMService mImservice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
ButterKnife.bind(this);
bindMusic();
}
private void bindMusic() {
// [0]保证服务长期运行
Intent intent = new Intent(this, MusicService.class);
startService(intent);
// [1]调用bindservice 目的是为了获取我们定义的中间人对象
mConn = new ServiceConnection() {
@Override // 当连接成功时候调用
public void onServiceConnected(ComponentName name, IBinder service) {
mImservice = (IMService) service;// 获取我们定义的中间人对象
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
// 连接MusicService 服务 获取我们定义的中间人对象
bindService(intent, mConn, BIND_AUTO_CREATE);
}
@OnClick({R.id.btn_music_play, R.id.btn_music_stop, R.id.btn_music_continue})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_music_play: // 播放音乐
mImservice.playMusic();
break;
case R.id.btn_music_stop:// 暂停音乐
mImservice.pauseMusic();
break;
case R.id.btn_music_continue:// 继续音乐
mImservice.rePlayMusic();
break;
}
}
@Override
protected void onDestroy() {
// 当activity销毁的时候 取消绑定服务
if (mConn != null) {
unbindService(mConn);
}
super.onDestroy();
}
}
附录、布局文件:activity_music.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_music_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐播放" />
<Button
android:id="@+id/btn_music_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐暂停" />
<Button
android:id="@+id/btn_music_continue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐继续" />
</LinearLayout>
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
2-AIII--Service服务的绑定
零、前言 1.在绑定时调用计时器,间隔打印时间 2.解绑时解除计时器 3.在Activity中调用Service的方法 绑定服务.gif 一、代码实现 1.服务类:BindTestService public class BindTestService extends Service { private static final String TAG = "BindTestService"; private TimerTask mRunTimerTask; @Override public void onCreate() { super.onCreate(); Log.e(TAG, "onCreate: "); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, "onStartCommand: "); return super.onStartCommand(intent, flags, startId); } @Nullable @Override publ...
-
下一篇
4-AIII--Service跨进程通信:aidl
零、前言 [1]. aidl:Android Interface definition language(安卓接口定义语言),目的:提供进程间的通信接口 [2]. 一个应用提供服务:称为服务应用,一个使用服务:称为客户应用 [3]. 解决客户应用如何调用服务应用的服务方法时,便是aidl用武之地 [4]. 服务端开启验证服务,客户端输入用户名和命名及数值,验证用户名:abc,密码:123,数值<5000 aidl.gif aidl.png 一、服务端代码实现: 1.com/toly1994/aiii_service/IPayAidlInterface.aidl // IPayAidlInterface.aidl package com.toly1994.aiii_service; // Declare any non-default types here with import statements interface IPayAidlInterface { //暴露方法 boolean pay(String name, String pwd, int money); } 2.P...
相关文章
文章评论
共有0条评论来说两句吧...