Android学习——Service(二)
今天来介绍Service的第二种使用方式,Bind方式
Bind方式启动服务
Bind方式和Start方式启动很类似,都是通过Intent来启动,不同的是,Bind方式需要传入三个参数,如下:
Intent intent2 =new Intent(MainActivity.this,BindService.class);
bindService(intent2,conn,BIND_AUTO_CREATE);
其中conn为一个ServiceConnection对象,用于获取以Bind方式绑定的Service对象,其包含两个抽象函数,如下:
conn=new ServiceConnection()
{
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
bindservice=((BindService.MyBinder)service).getService();
} @Override
public void onServiceDisconnected(ComponentName name)
{ }
};
其中的onServiceDisconnected为当Service的绑定意外丢失时会调用,在该例中没有用到。
其中onServiceConnected为当ServiceConnextion对象和Service成功绑定时回调用的方法,其中的IBinder参数正是在Service中的onBind方法的返回值类型。故我们只需要在Service中,新建一个IBinder的子类,获取Service对象即可。
在Service中创建IBinder接口
public class BindService extends Service
{
public class MyBinder extends Binder
{
public BindService getService()
{
return BindService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent)
{
Log.d("Jinx","Bind");
return new MyBinder();
}
如上所示即可,其中Binder为IBinder的一个子类,我们的内部类继承Binder即可。
在Activity获取Service中的方法
在通过conn进行关联后,便可以方便地在Activity中调用Service中的方法,如下代码虚拟了一个音乐播放器为例:
Service中:
public void Play()
{
Log.d("Jinx","Play");
}
public void Pause()
{
Log.d("Jinx","Pause");
}
Activity中:
case R.id.play_bt:
bindservice.Play();
break;
case R.id.pause_bt:
bindservice.Pause();
break;
Android学习——Service(二)的更多相关文章
- Android学习总结(二)——Service基本概念和生命周期
好了,前面我们已经学习了Activity的知识,相信大家也有一定的理解,但是还是不能放松,Android四大组件,我们才学习了一个而已,接下我们继续学习Service.计划总结如下内容: 一.Serv ...
- Android学习Service中遇到的问题
今天学习service,然后遇到了一个force close,log中存在这个一句话: 05-23 14:13:26.408: E/AndroidRuntime(17616): android.con ...
- 【Android】完善Android学习(二:API 2.3.4)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- Android学习笔记二之初始Activity
初识Activity,跟着教程学习敲了一遍这一章的内容,下面根据目录结构总结知识点: 一.活动是什么 上篇博文中我们提到了Android四大组件,其中有一个Activity,我们将之称为活动.活动是最 ...
- Android学习——Service(一)
这篇博文来介绍Android另一个十分重要的组件,Service.Service和Activity很类似,区别在于它运行在后台,不可见且没有界面.Service的优先级高于Activity,当系统负载 ...
- android 学习随笔二十二(小结)
ADB进程 * adb指令 * adb install xxx.apk * adb uninstall 包名 * adb devices * adb start-server * adb kill-s ...
- android 学习随笔二十一(内容提供者 )
一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查 ...
- android学习笔记二
ADT(Android Development Tools)安卓开发工具. android项目目录简介 ==> src==>源代码文件 res==>资源文件 AndroidManif ...
- Android学习(二)
学号 20189214 <Android程序设计>第七周学习总结 教材学习内容总结 监听 设置点击监听的5种方式 方法1:直接用匿名内部类 这是最常用的一种方法,直接setXXXListe ...
随机推荐
- Notepad++配置替换快捷配置
我们经常会收到实施或客户提供的excel文档,需要将对应的数据从数据库删除,那么我们怎么能快速把excel中的内容加上单引号和逗号到数据库中处理呢,我们可以使用nodepad++中的替换功能. 1.打 ...
- python中掉过又爬出来的那些坑
一.中文是不是“字母”? 当然,看到标题你肯定想这答案是显而易见的,但是.but.问题就在这里,我也是这么想的!!!然后就被python打脸了 看下面的例子: s = '你说我是字母吗' print( ...
- Python模拟鼠标和键盘操作实现重复性操作
前言 由于工作需要,要利用某软件去采集数据,做重复的动作大概500多次.所以想写一个程序代替人,去点击和输入. 一开始的思路有两个:1.用Python或者windows对此软件直接操作.2.利用Pyt ...
- JS框架设计之主流框架的引入机制DomeReady一种子模块
DomReady其实是一种名为"DomContentLoaded"事件的名称,不过由于框架的需要,它与真正的DomContentLoaded有区别,在旧的JS书籍中m都会让我们把J ...
- 读写锁--ReentrantReadWriteLock
读写锁,对于读操作来说是共享锁,对于写操作来说是排他锁,两种操作都可重入的一种锁.底层也是用AQS来实现的,我们来看一下它的结构跟代码: ------------------------------- ...
- Object-c 中的数据类型
导航: 基本类型 ID 对象类型常见的有 对象类型 -NSLog -NSNumber -NSString和NSMutableString -NSArray和NSMutableArray -NSSe ...
- Eclipse/MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory”
Eclipse或者MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory” 在NDK目录中新建一个名称 ndk-build (没有扩展名)的空文件
- no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.codec.JPEGImageEncoderImpl
no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.imag ...
- C#操作Redis List 列表
/// <summary> /// Redis 列表 /// </summary> public static void Redis_List() { RedisClient ...
- 自动生成数据库字典(sql2008) 转自 飘渺の云海
每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 截取一部分图片: 存储过程: SET ANSI_NULLS ON GO ...