现在的位置: 首页 > 移动开发 > 正文

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

2019年09月14日 移动开发 ⁄ 共 1228字 ⁄ 字号 评论关闭

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) {
            
		}
	};

邮箱:zz7zz7zz@163.com

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

抱歉!评论已关闭.