activity与service进程内通信
package com.example.binbin.testbinder; import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast; /**
* Created by binbin on 2016/7/29.
*/
public class MyService extends Service { //自定义的binder,包含了我们所需的操作
class myBinder extends Binder{ //要在Service进行的操作
public void sayHello(){ Log.d("TAG","sayHello");
Toast.makeText(MyService.this,"Hello",Toast.LENGTH_SHORT).show(); } public void sayBye(){ Log.d("TAG","sayBye");
Toast.makeText(MyService.this,"Bye",Toast.LENGTH_SHORT).show(); } }; @Nullable
@Override
//绑定服务和进行通信的时候,一定要返回一个自定义的Binder
public IBinder onBind(Intent intent) {
Log.d("TAG","onBind");
return new myBinder();
} @Override
public void onCreate() {
super.onCreate();
Log.d("TAG","onCreate");
} @Override
public int onStartCommand(Intent intent, int flags, int startId) { Log.d("TAG","onStartCommand");
return super.onStartCommand(intent, flags, startId); } @Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG","onDestroy"); } @Override
public boolean onUnbind(Intent intent) { Log.d("TAG","onUnbind");
return super.onUnbind(intent);
}
}
自定义了myBinder,在Activity与Service绑定的时候,返回myBinder的实例,Activity就可以操作Service里面的方法了(sayHello和sayBye)。
Activity里面必须要有两个实例,一个是myBinder,用于与Service通信的。另一个是ServiceConnection,代表了activity与服务的连接,在后面绑定的时候要传入这个类的实例,只有两个方法,我们要重写。第一个是连接成功时要干什么,肯定是要把binder返回给activity里面的binder啦。
public class MainActivity extends AppCompatActivity {
//四个按钮
Button start, stop, bind, unbind,sayHello,sayBye;
//自定义的Binder对象
private MyService.myBinder binder;
//绑定服务要添加的对象,ServiceConnection代表与服务的连接,系统自己会调用,我们只需要实现,不需要显示调用
//绑定的时候要把这个对象传进去。
private ServiceConnection conn = new ServiceConnection() {
//连接成功
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("TAG","Connect!");
binder = (MyService.myBinder) service; //获取其实例
//binder.sayHello(); //调用其方法
}
//连接失败
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button) findViewById(R.id.Start);
stop = (Button) findViewById(R.id.Stop);
bind = (Button) findViewById(R.id.Bind);
unbind = (Button) findViewById(R.id.unBind);
sayHello = (Button) findViewById(R.id.hello);
sayBye = (Button) findViewById(R.id.bye);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, MyService.class);
stopService(intent);
}
});
bind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,MyService.class);
//传进去了conn对象
bindService(intent,conn,BIND_AUTO_CREATE);
}
});
unbind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//解除只需要传入连接对象
unbindService(conn);
}
});
sayHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
binder.sayHello();
}
});
sayBye.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
binder.sayBye();
}
});
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
开启和绑定服务之后,按Hello,就可以使用服务里面的sayHello方法了。

activity与service进程内通信的更多相关文章
- MXNet源码分析 | KVStore进程内通信
本文主要基于MXNet1.6.0版本进行分析. MXNet的KVStore模块下有几个比较重要的类.KVStore是一个抽象类,提供了一些通用的API,例如Init.Push和Pull等.因为KVSo ...
- activity 与 service 之间的通信
activity和service通信:通过binder 举个我实际项目中的例子:在service中下载更新应用 首先是下载更新apk的service: public class UpdateVersi ...
- 通过messenger实现activity与service的相互通信
布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- 201709012工作日记--activity与service的通信机制
service生命周期 Service主要包含本地类和远程类. Service不是Thread,Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 ...
- Android中Activity、Service和线程之间的通信
Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...
- activity与service之间的通信方式
Activity之间的通信 1.activity与activity的通信可以通过Intent来封装数据,startActivityForResult()来实现,当跳转的activity调用finish ...
- Activity与Service通信(不同进程之间)
使用Messenger 上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger. 其实实现IPC(Inter-Process Communicat ...
- Activity和Service是否是在同一个进程中运行。
一般情况下,Activity和Service在同一个包名内,并且没有设定属性android:process=":remote",两者在同一个进程中. 因为一个进程只有一个UI线程, ...
- Activity与Service通信的方式有三种:
在博客园看到的,看着挺不错的,借来分享下 继承Binder类 这个方式仅仅有当你的Acitivity和Service处于同一个Application和进程时,才干够用,比方你后台有一个播放背景音乐的S ...
随机推荐
- MarkDown初学
什么是MarkDown? 第一次用这个MarkDown,感觉很好,界面友好,使用简洁而又使用,最主要的是此园支持这个语法,欣慰欣慰!先这么多,看看效果如何 推荐个不错的学习网站 Markdown 语法 ...
- Ubuntu12.04中在桌面建立指向网页的链接文件的方法
#cd /usr/share/applications #cp firefox.desktop ~/Desktop #cd ~/Desktop #chmod +x firefox.desktop 右键 ...
- 每天一个linux命令:【转载】mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- JSP学习(四)JSP属性范围
P属性范围 四种属性范围分别指以下四种: 当前页page:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求request:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页 ...
- BZOJ3926 Zjoi2015 诸神眷顾的幻想乡【广义后缀自动机】
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- 基于 task 为 VSCode 添加自定义的外部命令
我们有很多全局的工具能在各处使用命令行调用,针对某个仓库特定的命令可以放到仓库中.不过,如果能够直接为顺手的文本编辑器添加自定义的外部命令,那么执行命令只需要简单的快捷键即可,不需要再手工敲了. ...
- biginteger转Long
pjProDocumentFolderTreeNodeBySeqnoDTO.setFolderId(((java.math.BigInteger) objects[0]).longValue()); ...
- LG4475 巧克力王国
题意 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为其牛奶和可可的含量.由于每个人对于 ...
- drill java && spring jdbc 连接使用
原生 jdbc 连接 1. maven 包 <dependency> <groupId>org.apache.drill.exec</groupId> < ...
- PADS VBA 编写笔记
PADS VBA 编写笔记 由于 PADS 的中编码不是 utf8 的,所以在编写时放到 PADS 中会出现乱码. 有时会使用中文注释,但是当以中文注释结尾时就会出现错误,于是就如果结尾是以英文就没问 ...