Activity和Service绑定
2015-11-17 16:12
399 查看
Activity和Service绑定后,可以方便Activity随时调用对应的Service里面的方法
绑定代码如下
Activity类代码:
[java] view plaincopy
<span style="font-size:16px;">package com.fox.Activity;
import com.fox.Activity.service.Service1;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Activity1 extends Activity {
private Button btn1 = null;
private static String LOG="mp3";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new btn1ClickListener());
//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
private Service1 myservice = null;//绑定的service对象
//连接对象,重写OnserviceDisconnected和OnserviceConnected方法
public ServiceConnection conn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(LOG, "onServiceDisconnected>>>>>>>>");
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(LOG, "onServiceConnected>>>>>>>>");
myservice = ((Service1.MyBinder)service).getService();
Log.i(LOG, myservice+">>>>>>>>");
}
};
class btn1ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
unbindService(conn);
}
}
}</span>
Service类代码:
[java] view plaincopy
<span style="font-size:16px;">package com.fox.Activity.service;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class Service1 extends Service{
private final IBinder binder = new MyBinder();
private static final String LOG="mp3";
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG, "onBind............");
return binder;
}
/**
* 该类是获得Service对象
* @author Administrator
*
*/
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}
@Override
public void onCreate() {
Log.i(LOG, "oncreate............");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "onstart............");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG, "onstartcommand............");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(LOG, "ondestory............");
super.onDestroy();
}
}
</span>
开始绑定调用方法A.bindService()--->S.onCreate--->S.onBind---->>A.onServiceConnected绑定成功,并获得Service对象
结束绑定按钮的监听事件-->>unbindService(conn)关闭连接对象-->>S.destory()销毁该service
注:结束绑定时是不会调用onServiceDisconnected()方法的;
http://blog.csdn.net/huqingwei0824/article/details/6869622
绑定代码如下
Activity类代码:
[java] view plaincopy
<span style="font-size:16px;">package com.fox.Activity;
import com.fox.Activity.service.Service1;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Activity1 extends Activity {
private Button btn1 = null;
private static String LOG="mp3";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new btn1ClickListener());
//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
private Service1 myservice = null;//绑定的service对象
//连接对象,重写OnserviceDisconnected和OnserviceConnected方法
public ServiceConnection conn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(LOG, "onServiceDisconnected>>>>>>>>");
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(LOG, "onServiceConnected>>>>>>>>");
myservice = ((Service1.MyBinder)service).getService();
Log.i(LOG, myservice+">>>>>>>>");
}
};
class btn1ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
unbindService(conn);
}
}
}</span>
Service类代码:
[java] view plaincopy
<span style="font-size:16px;">package com.fox.Activity.service;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class Service1 extends Service{
private final IBinder binder = new MyBinder();
private static final String LOG="mp3";
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG, "onBind............");
return binder;
}
/**
* 该类是获得Service对象
* @author Administrator
*
*/
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}
@Override
public void onCreate() {
Log.i(LOG, "oncreate............");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "onstart............");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG, "onstartcommand............");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(LOG, "ondestory............");
super.onDestroy();
}
}
</span>
开始绑定调用方法A.bindService()--->S.onCreate--->S.onBind---->>A.onServiceConnected绑定成功,并获得Service对象
结束绑定按钮的监听事件-->>unbindService(conn)关闭连接对象-->>S.destory()销毁该service
注:结束绑定时是不会调用onServiceDisconnected()方法的;
http://blog.csdn.net/huqingwei0824/article/details/6869622
相关文章推荐
- 深度学习模型之各种caffe版本(Linux和windows)的网址和配置
- TableView编辑中实现多行删除方法以及注意
- 用rabbitMQ实现生产者消费者
- 【黑马程序员】C语言运算符
- sql2008 启动报错:应用程序的组件中发生了无法处理的异常和值不能为空 viewinfo(已解决!)
- 机器视觉之 ICP算法和RANSAC算法
- 产品思路
- 老码农教你学英语
- 图片压缩成指定大小
- 数据库事务介绍
- Sharepoint中出现webpart部署之后却找不到的一种情况
- Jquery操作Cookie
- Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建
- 常用的监测系统状态shell脚本
- 2015年rctf web150 (Update set 二次注入)
- Android数据库更新并保留原来数据的实现
- dialog.setCancelable与setCanceledOnTouchOutside的区别
- Codeforces Round #331 (Div. 2) B. Wilbur and Array
- 【Leet Code】34. Search for a Ranged---Medium
- mysql访问连接过多