Android Service解绑后再次绑定以及绑定服务出现空指针问题
2017-03-02 15:54
309 查看
1——今天在做一个应用的前台功能的关闭时出现了这么一个问题,获取了ibinder实例后,调用在Service编写的方法出现了空指针问题。代码如下
后来百度了才知道绑定服务是异步的,所以会出现还没绑定完服务就开始调用方法,当然会报空指针,解决方法是把调用方法的代码放到onServiceConnected()里面去,等到绑定结束才开始调用服务里的方法
2——然后又在做前台服务的重新开启时遇到了问题,就是调用unbind()方法时候,在onServiceDisconnected()没调用里面的逻辑。不得其解,只能把关闭开启前台功能逻辑全部写在Service的生命周期方法里去,以下是代码
值得注意的是刚开始,我只重写了onBind()和unBind()方法,其实如果解绑了一次重新绑定是不会调用onBind()方法的,重新绑定会调用onRebind()方法,并且前提条件是unBind()方法返回ture。这时候重新绑定onRebind()才会被调用,这是要注意的。
private UpdateService.mBinder mBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { mBinder = (UpdateService.mBinder) iBinder; } @Override public void onServiceDisconnected(ComponentName componentName) { } }; intent_service_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) {//Switch按钮 if(b){ Intent intent = new Intent(WeatherAcitivity.this,UpdateService.class); bindService(intent,connection,BIND_AUTO_CREATE); mBinder.stopIntentService(); }else { unbindService(connection); } } });
后来百度了才知道绑定服务是异步的,所以会出现还没绑定完服务就开始调用方法,当然会报空指针,解决方法是把调用方法的代码放到onServiceConnected()里面去,等到绑定结束才开始调用服务里的方法
2——然后又在做前台服务的重新开启时遇到了问题,就是调用unbind()方法时候,在onServiceDisconnected()没调用里面的逻辑。不得其解,只能把关闭开启前台功能逻辑全部写在Service的生命周期方法里去,以下是代码
public boolean onUnbind(Intent intent) { Log.d("me", "解绑");//要看到前台 startForeground(1,notification); return true; } @Override public void onRebind(Intent intent) { //Log.d("me", "重新绑定"); stopForeground(true); super.onRebind(intent); } @Override public IBinder onBind(Intent intent) { //初次绑定 stopForeground(true); return mBinder; }
值得注意的是刚开始,我只重写了onBind()和unBind()方法,其实如果解绑了一次重新绑定是不会调用onBind()方法的,重新绑定会调用onRebind()方法,并且前提条件是unBind()方法返回ture。这时候重新绑定onRebind()才会被调用,这是要注意的。
相关文章推荐
- Android绑定服务后出现空指针异常问题
- Android应用程序绑定服务(bindService)的过程源代码分析
- Android Service 的延迟绑定与解绑技术
- Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法
- Android应用程序绑定服务(bindService)的过程源代码分析
- Android--Service之绑定服务交互
- Android应用程序绑定服务(bindService)的过程源代码分析(3)
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed以及路径等问题
- Android使用Google Map服务时获取Map API Key时在Win7下出现的问题
- android eclipse 出现unknown host service问题
- 继承windows service的安装类出现的多余服务被安装的问题
- Android重新安装以及出现的一些问题和解决方案
- Android Service---创建绑定类型服务
- linux环境下调试嵌入式设备时出现Aborted、segmentation fault、卡死的问题以及关于指针使用的一点想法
- Android 03 Bound Service--之被绑定的服务
- 用gradle管理android项目出现的问题以及解决方法