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 ...
随机推荐
- Compass入门
一.Compass是什么? 简单说,Compass是Sass的工具库(toolkit). Sass本身只是一个编译器,Compass在它的基础上,封装了一系列有用的模块和模板,补充Sass的功能. ...
- NSArray中的对象进行排序
看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行排序 使用selector进行排序 小引 我们将要 ...
- 【剑指offer】08二叉树的下一个节点,C++实现
原创博文,转载请注明出处! # 题目 父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示. # 思路 如果节点有右子节点,则右子节点的最左节点是该节点的下一个节点.例如,寻找b的下一 ...
- 【Git】无法从远程分支pull
随着工作量的增多,接触的新项目,新同事越来越多,发现自己不会的东西好多.有这么一句话:“你所知道的知识就像是一个圆,你会的越多,圆越大,但你接触的未知世界也越大,也就越加觉得自己无知”.原话记不全了, ...
- Django项目部署(阿里云)(1)--基本功能实现
新博客地址:http://muker.net/django-server.html 手头需要部署一个Django项目,前面的博客也因为偷懒也没有部署,这里记录一下部署过程.ps:其实网上比较靠谱的说明 ...
- IntelliJ-IDEA中mybatis三剑客
一.mybatis-generator的使用 作用:根据数据库自动生成pojo.dao和xml文件. 1.引入mybatis-generator pom.xml中引入配置:
- (笔记)JQuery扩展方法实现Form表单与Json互相转换
JQuery笔记 记两段代码,使用JQuery实现从表单获取json与后端交互,以及把后端返回的json映射到表单相应的字段上. 把表单转换出json对象 //把表单转换出json对象 $.fn.to ...
- 关于simulink hdlcoder的优化问题
HDL Block Properties中包含有多个优化选项. 1,delay balance 当其他分支优化过后,可能会引入一个或几个周期的delay,这时候需要在与其并行的几条信号路径上也加上de ...
- Sprint第一个冲刺(第七天)
今天休息. 燃尽图:
- BZOJ3590 [Snoi2013]Quare
题意 4.20四川芦山地震发生后,抗震救灾委员会接到一个紧急任务,四川省给该委员会发了一份地图,这份地图给出了该省一些城市的情况:任两个城市是用一条或多条公路连接起来的,也可以没有公路连接,但是每个城 ...