当前位置: 代码迷 >> Android >> android 内存储器泄露那些事情之游标、文件、网络连接、广播(四)
  详细解决方案

android 内存储器泄露那些事情之游标、文件、网络连接、广播(四)

热度:267   发布时间:2016-04-28 07:53:33.0
android 内存泄露那些事情之游标、文件、网络连接、广播(四)

android产生内存泄露的不良代码很多,数据库操作,忘记关闭游标;文件操作,忘记关闭输入输出流;网络操作,忘记关闭网络连接与输入输出流;

动态注册广播忘记反注册广播等等。

1.数据库操作,关闭游标。

		Cursor cursor=null;		try {				//TODO...					} catch (Exception e) {			e.printStackTrace();		} finally{			if(null!=cursor)			{				cursor.close();				cursor=null;			}		}

2.文件操作,关闭输入输出流。

		FileOutputStream fos=null;		try {						fos = new FileOutputStream(destFilePath);			int readCount = 0;			int len = 1024;			byte[] buffer = new byte[len];			while ((readCount = in.read(buffer)) != -1)			{				fos.write(buffer, 0, readCount);			}			fos.flush();					} catch (Exception e) {			e.printStackTrace();		}finally{						try {				if (null != fos)				{					fos.close();					fos = null;				}			} catch (Exception e2) {				e2.printStackTrace();			}						try {				if (null != in)				{					in.close();					in = null;				}			} catch (Exception e3) {				e3.printStackTrace();			}		}


3.网络连接,关闭连接与输入输出流。

		HttpURLConnection mHttpconn=null;		try {						//TODO ...								} catch (Exception e) {			e.printStackTrace();		}finally{			if(null!=mHttpconn)			{				mHttpconn.disconnect();				mHttpconn=null;			}                }

4.注册广播,需要反注册广播。

	/**	 * 注册广播	 */	private void register()	{        IntentFilter filter = new IntentFilter();          filter.addAction("your action............");           registerReceiver(mReceiver, filter);  	}		/**	 * 反注册广播	 */	private void unRegister()	{		 unregisterReceiver(mReceiver);  	}		/**	 * 广播	 */	private BroadcastReceiver mReceiver=new BroadcastReceiver()	{		@Override		public void onReceive(Context context, Intent intent) {            		}	};

邮箱[email protected]

微博:http://weibo.com/u/3209971935



  相关解决方案