2-AIII--Service服务的绑定
零、前言
1.在绑定时调用计时器,间隔打印时间
2.解绑时解除计时器
3.在Activity中调用Service的方法
一、代码实现
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
public IBinder onBind(Intent intent) {
Log.e(TAG, "onBind: ");
//使用计时器间隔打印时间
Timer timer = new Timer();
mRunTimerTask = new TimerTask() {
@Override
public void run() {
System.out.println("scheduledExecutionTime:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(scheduledExecutionTime()));
}
};
//延迟3秒,2秒周期执行
timer.schedule(mRunTimerTask, 3000L,2 * 1000L);
Log.e(TAG, "计时器已开启");
return new MyBinder();
}
@Override
public boolean onUnbind(Intent intent) {
Log.e(TAG, "onUnbind: 成功解绑");
mRunTimerTask.cancel();
Log.e(TAG, "计时器已取消");
return super.onUnbind(intent);
}
}
2.MyBinder类
/**
* 作者:张风捷特烈
* 时间:2018/8/25 0025:11:09
* 邮箱:1981462002@qq.com
* 说明:Service的onBind方法返回一个IBinder对象
* 该对象在是Service与Activity的连接人,在Activity可以获取该对象
*/
public class MyBinder extends Binder {
public void methodInService() {
System.out.println("我是服务里的方法");
}
}
3.注册:app/src/main/AndroidManifest.xml
<service android:name=".bind.BindTestService"/>
4.Activity页:
public class BindActivity extends AppCompatActivity {
@BindView(R.id.id_btn_bind)
Button mIdBtnBind;
@BindView(R.id.id_btn_unbind)
Button mIdBtnUnbind;
private ServiceConnection mConn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bind);
ButterKnife.bind(this);
}
@OnClick({R.id.id_btn_bind, R.id.id_btn_unbind})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.id_btn_bind:
// [0]启动服务
Intent intent = new Intent(this, BindTestService.class);
startService(intent);
//[1]创建连接对象
mConn = new ServiceConnection() {
// 当连接成功时候调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyBinder binder = (MyBinder) service;
binder.methodInService();
}
// 当连接断开时候调用
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
//[2]绑定服务启动
bindService(intent, mConn, BIND_AUTO_CREATE);
break;
case R.id.id_btn_unbind:
//[3]解绑服务启动
unbindService(mConn);
break;
}
}
}
开启服务时:onCreate==>onStartCommand
绑定时:onBind
解绑时:onUnbind
附录布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BindActivity">
<Button
android:id="@+id/id_btn_bind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="绑定服务"
app:layout_constraintEnd_toStartOf="@+id/id_btn_unbind"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/id_btn_unbind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解绑服务"
app:layout_constraintStart_toEndOf="@+id/id_btn_bind"
app:layout_constraintTop_toTopOf="@+id/id_btn_bind"/>
</android.support.constraint.ConstraintLayout>
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
1-AIII-Service实现开屏跳转到指定Activity
普通Service特性 1.startService方法启动,不关闭,则一直运行,即使退出了当前Activity 2.基于此可以实现音乐播放器的后台播放 3.基于此结合广播接收者可以实现开屏跳转到指定Activity、任意位置锁屏监听 3-1.在服务开启时注册开关屏的广播接收者,在服务结束时注消开关屏的广播接收者 3-2.每次开屏跳转到指定页面 Service实现开屏跳转到指定Activity.gif 1.ScreenService.java public class ScreenService extends Service { private static final String TAG = "ScreenService"; private ScreenReceiver receiver; @Override public IBinder onBind(Intent intent) { Log.i(TAG, "onBind"); return null; } @Override//当服务第一次启动的时候调用 public void onCreate() {//在这个方法里面注册广...
-
下一篇
3-AIII--Service绑定服务基于接口调用方法
零、前言 1.上篇中MyBinder暴漏在外,亲自上阵,执行方法。Binder是连接者,能不出面尽量不出面,一个"电话(接口)"搞定的事就不要让他老人家(MyBinder)亲自跑一趟。面向接口,隐藏不必要的对象。 2.说服务怎能少得了音乐播放器,这里只写写伪方法,后面在多媒体篇会来完善。 基于接口调用方法.gif 一、代码实现 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"; @...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2全家桶,快速入门学习开发网站教程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果