activity可以绑定Service,并且可以调用Service中定义的方法

Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道;

public class MainServer extends Service {

    private final String TAG = "Service------->";

    private final IBinder binder = new MyBinder();        //绑定器

    public class MyBinder extends Binder {
public MainServer getService() {
return MainServer.this; //返回本服务
}
} /** 绑定时执行 */
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind()");
return binder;
} /** 只在创建时执行一次 */
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate()");
} /** 断开绑定或者停止服务时执行 */
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy()");
} /** 当内存不够是执行该方法 */
@Override
public void onLowMemory() {
super.onLowMemory();
Log.i(TAG, "onLowMemory()");
onDestroy(); } /** 当从新绑定是执行 */
@Override
public void onRebind(Intent intent) {
// TODO Auto-generated method stub
super.onRebind(intent);
Log.i(TAG, "onRebind()");
} @Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.i(TAG, "onStart()");
} /** 每次执行Service都会执行该方法 */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand --->flags = " + flags + " startId = " + startId);
con = new Connect();
con.start(); return super.onStartCommand(intent, flags, startId);
} /** 断开绑定是执行 */
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onUnbind()");
return super.onUnbind(intent);
}

MainActivity代码:  必须声明实例ServiceConnection,并且在绑定成功后获取到Service,用以调用Service的方法

public class MainActivity extends Activity {

    private MainServer mainService;
//绑定Service监听
ServiceConnection sconnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("activity---->", "已断开Service");
}
/**当绑定时执行*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.i("activity---->", "已绑定到Service");
mainService = ((MainServer.MyBinder)service).getService();
Intent i = new Intent();
mainService.onStartCommand(i, 0, 0); //绑定成功后可以调用Service方法,此处等与是启动Service
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start = (Button)findViewById(R.id.start);
Button stop = (Button)findViewById(R.id.stop);
Button send = (Button)findViewById(R.id.send);
Button skip = (Button)findViewById(R.id.skip); start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent bind = new Intent(MainActivity.this,MainServer.class);
bindService(bind, sconnection, Context.BIND_AUTO_CREATE); }
});
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
unbindService(sconnection);
}
});

android Activity绑定Service的更多相关文章

  1. Tabhost中Activity绑定Service

    在android中,一个Activity绑定一个Service组件我们一般用Context().bindService方法就能够.可是假设这个 Activity属于一个Tabhost的话就不行了,在网 ...

  2. Android Activity与Service的交互方式

    参考: http://blog.csdn.net/gebitan505/article/details/18151203 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通 ...

  3. Android Activity、Service、BroadcastReceiver 的生命周期

    Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...

  4. Android——Activity and Service

    参考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html   http://www.cnblogs.com/feisky/ar ...

  5. android学习-IPC机制之ACtivity绑定Service通信

    bindService获得Service的binder对象对服务进行操作 Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),Serv ...

  6. Android activity和service的生命周期对比

    1Activity生命周期 七个方法 1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的o ...

  7. Activity与Service通信(不同进程之间)

    使用Messenger 上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger. 其实实现IPC(Inter-Process Communicat ...

  8. Activity与Service通信的方式有三种:

    在博客园看到的,看着挺不错的,借来分享下 继承Binder类 这个方式仅仅有当你的Acitivity和Service处于同一个Application和进程时,才干够用,比方你后台有一个播放背景音乐的S ...

  9. Activity与Service通信

    Activity与Service通信的方式有三种: 继承Binder类 这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景 ...

随机推荐

  1. Windows下Python连接数据库(mysql, mongodb)

    一 实验平台 1 os: win7 64位旗舰版sp1 2 python: 2.7.10 x64 二 连接数据库 1 连接 mysql数据库 (1)下载mysql(5.6.25-winx64) 建议下 ...

  2. 彻底解决rman恢复碰到ora-01152错

    说说碰到这个问题的背景.使用NBU调脚本对oracle进行备份.脚本如下:RUN {ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';ALLOCATE CHANNEL ch0 ...

  3. Mysql数据库中存储中文为乱码

    1. 修改数据库的编码格式为utf8 2. 修改表的编码格式为utf8 3. 修改字段的编码格式为utf8 祝你好运!

  4. 升级owncloud到7.0.2

    owncloud很久没有提示升级了,官网已经升级到7.0.2,访问Update Center依旧显示是最新.估计是有什么问题导致不能自动更新.想着干脆手动升级试试.找到了两个手动升级的文档: 大版本升 ...

  5. Starling项目启动时报错This application is not correctly embedded (wrong wmode value)

    这个其实是Flash报的“ErrorEvent:. text=Error #3702: Context3D 不可用”错误被Starling变了一下. 解决方法:找到项目文件夹中的html-templa ...

  6. Model View Controller

    On the iPhone or iPod touch, a modal view controller takes over the entire screen. This is the defau ...

  7. python 核心编程课后练习(chapter 6)

    6-1 #6-1 #help(string) import string str = "helloworld" substr = "h1e" if string ...

  8. LR12.53—第6课:运行负载测试

    第6课:运行负载测试 当你运行一个负载测试,LoadRunner将生成系统上的负载.然后,您可以使用LoadRunner的监控器和图形负载下,观察系统的性能. 在这一课中,你将涵盖以下主题: 一目了然 ...

  9. IOS开发者账号申请记录

    1. 准备好一个企业邮箱 .企业营业执照复印件.一张可以支付的VISA或者MasterCard 2. 2016/01/13 注册appid https://developer.apple.com/pr ...

  10. shell 判断文件是否存在

    举例 #!/bin/sh myFile="/var /log/httpd/access.log" if [ ! -e "$myFile" ]; then tou ...