android
来源:互联网 发布:期货交易源码 编辑:程序博客网 时间:2024/06/05 05:35
关于安卓BindService 绑定问题
BindService 主要用于当用户想要将活动activity与service进行绑定,当activity结束时(调用者)service也跟着一起结束了;而startService()只能用来启动服务,当服务启动后,就与前台活动没有了关系;
当我们要从service外部获得service中的方法内容时,我们必须要Ibinder返回的service对象才能操作;所以我们必须利用bindservice的方式去绑定服务获取binder对象,利用binder的方式去获取service的方法内容;
使用bindservice的具体过程如下:
1)创建意图:Intent intent = new Intent(MainActivity.this,BindService.class);
2)创建bindservice对象:bindService(intent,conn,BIND_AUTO_CREATE);
3)创建内部类MyBinder、新建mybinder对象:
private MyBinder myBinder = new MyBinder(); class MyBinder extends Binder{ public BindService getService(){ return BindService.this; } }
4)onBind()返回mybinder对象:
public IBinder onBind(Intent intent) { return myBinder; }
5)通过serviceconnection获取Binder对象进一步来获取service对象,最后调用service中的方法:
ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { BindService.MyBinder binder = (BindService.MyBinder)service; BindService bindService = binder.getService(); bindService.print(); } @Override public void onServiceDisconnected(ComponentName name) { } };
示例代码:
MainActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initEvent(); } ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { BindService.MyBinder binder = (BindService.MyBinder)service; BindService bindService = binder.getService(); bindService.print(); } @Override public void onServiceDisconnected(ComponentName name) { } }; private void initEvent() { findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,BindService.class); bindService(intent,conn,BIND_AUTO_CREATE); } }); findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(conn); } }); }}
BindService
public class BindService extends Service { public void print(){ Log.d(TAG, "print: BindService"); } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d(TAG, "onStart"); } @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); } @Override public void onRebind(Intent intent) { Log.d(TAG, "onRebind"); super.onRebind(intent); } private MyBinder myBinder = new MyBinder(); @Nullable @Override public IBinder onBind(Intent intent) { return myBinder; } class MyBinder extends Binder{ public BindService getService(){ return BindService.this; } }}
0 0
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- Anaconda下安装mysql-python的包
- 位运算
- NetHogs——按进程实时统计网络带宽利用率
- 数字的单位转换和字符串插入的类
- VC 识别USB HID设备
- android
- foj 1082 最大黑区域【dfs】
- JPUSH极光推送步骤
- <c:forEach varStatus="status">的属性值问题
- javascript---数组array方法reduce()
- mysql导入大型的sql文件遇到问题及解决办法
- php get 请求
- 2017.03.23_集合类总结
- bzoj1588(hnoi2002)营业额统计 (Splay Treap 平衡树)