android serviceconnection unbind流程,Android Service 再次 unbindSrvice 时的问题
在 Android Service 未被绑定的情况下,调用 unbindService(connection) 会报错误:service Service not registered, 所以在解除绑定前要先判断连接是否处于绑定状态.
MainActivity类:
public class MainActivity extends AppCompatActivity {
private MyService.DownloadBinder downloadBinder;
private boolean isBind = false; //是否绑定服务
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button startService = (Button)findViewById(R.id.start_service);
final Button stopService = (Button)findViewById(R.id.stop_service);
final Button bindService = (Button)findViewById(R.id.bind_service);
final Button unbindService = (Button)findViewById(R.id.unbind_service);
startService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(MainActivity.this, MyService.class);
startService(startIntent);
}
});
stopService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent stopIntent = new Intent(MainActivity.this, MyService.class);
stopService(stopIntent);
}
});
bindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent bindIntent = new Intent(MainActivity.this, MyService.class);
isBind = bindService(bindIntent, connection, BIND_AUTO_CREATE); //绑定服务
}
});
unbindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isBind){ //解除绑定前要判断服务是否是绑定状态,其实此处应该还要加入 connection 是否为null 的判断
unbindService(connection); //解绑服务
isBind = false;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
downloadBinder = (MyService.DownloadBinder)service;
downloadBinder.startDownload();
downloadBinder.getProgress();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
}
MyService类:
public class MyService extends Service {
private DownloadBinder mBinder = new DownloadBinder();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("MyService", "onCreate execute");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("MyService", "onStartCommand execute");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("MyService", "onDestroy execute");
}
class DownloadBinder extends Binder{
public void startDownload(){
Log.d("MyService", "startDownload executed");
}
public int getProgress(){
Log.d("MyService", "getProgress executed");
return 0;
}
}
}
android serviceconnection unbind流程,Android Service 再次 unbindSrvice 时的问题相关推荐
- android serviceconnection unbind流程,Android - Service Bind/Unbind 使用
Service Bind/Unbind 使用方式 本文介绍了本地服务,也就是同一个进程内的服务,如何使用 Bind/Unbind 方式被 Activity 使用. 本文不涉及 AIDL 使用 Serv ...
- android serviceconnection unbind流程,Android unbindService 流程分析
基于Android 6.0的源码剖析, 分析bind service的启动流程. /frameworks/base/core/java/android/app/ContextImpl.java /fr ...
- android p 权限流程,Android native 权限控制流程
关联文章: 前言: 在 Android Runtime Permission 详解 中详细的说明了permission 在Android 6.0 前后的区别,对于M 以后应用可以通过checkPerm ...
- android zygote启动流程,Android zygote启动流程详解
对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...
- android屏幕适配流程,Android屏幕适配姿势
GitHub地址 为什么要屏幕适配? device_framentation.png 统计 碎片化 品牌机型碎片化 屏幕尺寸碎片化 操作系统碎片化 为了保证用户获得一致的用户体验效果,使得某一元素在A ...
- android otg 挂载流程,android USB OTG功能如何打开及实现
1.检查HW原理图,确认是否支持OTG功能(vbus是否供上电,IDDIG pin链接是否正确) 2.若HW确认支持OTG功能,则按照如下方法分别打开USB OTG功能及实现挂载: 如何打开USB O ...
- android wifi wps 流程,android中WiFi wps连接方式
Android 个人热点 wps方式连接流程 android手机开启个人热点时,可以选择WPS连接方式 个人热点端 连接端 当个人热点端选择按钮时,连接端只需要点击WPS按钮即可连接:当个人热点端选择 ...
- Android 安装apk流程,Android PMS(二)-Apk安装流程
原创内容,转载请注明出处,多谢配合. 一.APK组成 在APK的安装流程,在此之前先简单了解下APK组成: 目录/文件 描述 assert 存放的原生资源文件,通过AssetManager类访问. l ...
- android 蓝牙扫描流程,Android 9.0 Bluetooth源码分析(二)蓝牙扫描流程
1 UI 蓝牙开始扫描位于setting的 /packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothPairingDet ...
最新文章
- 关于登录记住密码使用cookie的详解
- 四十一、Vue项目上手 | 用户管理系统 实现用户修改和删除功能(完成篇)
- xp系统的计算机管理中用户在哪里,WINDOWSXP的用户管理和系统安全设置
- OJ1062: 最大公约数(C语言)
- 【数字图像处理】直方图均衡化详解及编程实现
- Mysql查询数据(单表查询)
- chap8_1 Render to texture in OGRE
- RTMP 协议包头参考
- Myeclipse的web项目移植到Eclipse中需要添加的包
- mysql数据库定时清理数据
- excel打不开html格式的文件,excel文件打不开提示格式无效怎么解决【图文】
- 叶罗丽颜值测试软件齐娜多少分,精灵梦叶罗丽:美颜相机下灵公主16岁、齐娜7岁,他竟然拍的46岁...
- python实现在线答题_仿 StackOverflow 开发在线问答系统
- Java手机游戏新流星蝴蝶剑,网页最好玩的游戏
- C语言程序设计笔记(浙大翁恺版) 第七章:函数
- 如何对Hive Metastore进行权限控制
- 1000行代码入门python-小白入门篇,Python到底是什么?
- [NOIP]模拟17 题解
- 运行期间动态切换Redis数据库
- 【JavaSE】算术运算符、关系运算符、逻辑运算符、赋值运算符与三元运算符