出现leaked ServiceConnection 的解决办法

xiaoxiao2021-02-28  105

Activity com.skyace.service.MainActivity has leaked ServiceConnection com.phicomm.hu.MainActivity that was originally bound here android.app.ServiceConnectionLeaked: Activity com.skyace.service.MainActivity has leaked ServiceConnection com.skyace.service.MainActivity$1@41cd81f0 that was originally bound here

起因

最近在做项目时,用到了关于service与actvity绑定的知识,但是在调试过程中无意中出现了上述的bug,后来经分析,当清理后台activity时就会报这个错误,我们来看一下代码:

public class MainActivity extends Activity { //定义浮动窗口布局 LinearLayout mFloatLayout; //创建浮动窗口设置布局参数的对象 WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams(); WindowManager mWindowManager; //定义对getInformation的引用 GetInformation getInformation; //** Called when the activity is first created. FxService.MyBinder myBinder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button start = (Button)findViewById(R.id.start_id); Button remove = (Button)findViewById(R.id.remove_id); GetInformation.createGetInformation(this); getInformation = GetInformation.getGetInformation(); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { bindService(); } }); remove.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(conn); } }); } private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { System.out.println("--Service Disconnected--"); } @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("--Service Connected--"); myBinder = (FxService.MyBinder) service; FxService fxService = myBinder.getService(); } }; private void bindService(){ Intent intent = new Intent(MainActivity.this, FxService.class); bindService(intent, conn, BIND_AUTO_CREATE); } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

后来在之后加上了重写的onDestroy的回调方法中加入了对服务的解绑操作即 unbindService就成功解决了,如下:

@Override protected void onDestroy() { // TODO 自动生成的方法存根 super.onDestroy(); unbindService(conn); } 123456 123456

其实这个错误有点类似于dialog中如果activity已经finish()掉但dialog还没dissmiss()时也会报类似的溢出错误,希望大家引以为戒,多多注意自己的代码习惯,做好防护的措施。

转载自:http://blog.csdn.net/as02446418/article/details/46790843

转载请注明原文地址: https://www.6miu.com/read-29023.html

最新回复(0)