出现 leaked ServiceConnection 解决办法
2015-06-03 13:54
323 查看
在Android界面上调用service绑定方法,退出界面时候报告一堆错误 Activity
has leaked ServiceConnection 等,应该重写onDestroy方法,取消绑定,这样就ok了。
package com.jiuqi.testservice01;
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.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private MyService myservice ;
public ServiceConnection serviceconnection = new ServiceConnection(){
@Override
public void onServiceDisconnected(ComponentName name){
myservice = null;
Toast.makeText(MainActivity.this, "MyService failed", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceConnected(ComponentName name, IBinder service){
myservice = ((MyService.MyBinder)service).getService();
Toast.makeText(MainActivity.this, "MyService connected", Toast.LENGTH_SHORT).show();
}
};
private OnClickListener btnClickListener = new OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this,MyService.class);
switch(v.getId()){
case R.id.button1:
startService(intent);
break;
case R.id.button2:
stopService(intent);
break;
case R.id.button3:
bindService(intent, serviceconnection, Context.BIND_AUTO_CREATE);
break;
case R.id.button4:
unbindService(serviceconnection);
break;
default:
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn4 = (Button)findViewById(R.id.button4);
btn1.setOnClickListener(btnClickListener);
btn2.setOnClickListener(btnClickListener);
btn3.setOnClickListener(btnClickListener);
btn4.setOnClickListener(btnClickListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy(){
super.onDestroy();
unbindService(serviceconnection);
}
}
has leaked ServiceConnection 等,应该重写onDestroy方法,取消绑定,这样就ok了。
package com.jiuqi.testservice01;
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.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private MyService myservice ;
public ServiceConnection serviceconnection = new ServiceConnection(){
@Override
public void onServiceDisconnected(ComponentName name){
myservice = null;
Toast.makeText(MainActivity.this, "MyService failed", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceConnected(ComponentName name, IBinder service){
myservice = ((MyService.MyBinder)service).getService();
Toast.makeText(MainActivity.this, "MyService connected", Toast.LENGTH_SHORT).show();
}
};
private OnClickListener btnClickListener = new OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this,MyService.class);
switch(v.getId()){
case R.id.button1:
startService(intent);
break;
case R.id.button2:
stopService(intent);
break;
case R.id.button3:
bindService(intent, serviceconnection, Context.BIND_AUTO_CREATE);
break;
case R.id.button4:
unbindService(serviceconnection);
break;
default:
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn4 = (Button)findViewById(R.id.button4);
btn1.setOnClickListener(btnClickListener);
btn2.setOnClickListener(btnClickListener);
btn3.setOnClickListener(btnClickListener);
btn4.setOnClickListener(btnClickListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy(){
super.onDestroy();
unbindService(serviceconnection);
}
}
相关文章推荐
- SQLServer2008找出所有包含172.17.224.40字样的存储过程
- 快速排序
- Flex builder经常会抛出:进程已终止,没有建立到调试器的连接。error while loading initial content的解决方法
- EL表达式
- js判断字符串以指定字符串结尾/网上整理
- 谈异常控制流
- FatMouse' Trade
- iOS开发UI基础—31在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- C++实现事件机制
- NYOJ 76 超级台阶
- BC 2015年百度之星程序设计大赛 - 初赛(1)(矩形面积-旋转卡壳)
- 【转】Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
- quick-cocos2d-x游戏开发【7】——scheduler 定时器
- BMI身体质量指数计算公式
- XenDesktop 7.5域账户登录名更改后,DDC Catalog中显示原有登录名,如何同步
- 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容
- 利用函数计算最高分和平均分
- 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- myBatis 官方参考手册