安卓OOM 内存溢出的一

来源:互联网 发布:膜是什么意思网络语言 编辑:程序博客网 时间:2024/06/06 00:28
1:标 查 询 数 据 库 没 有 关 闭 游 标 查 询 数 据 库 没 有 关 闭 游 标 查 询 数 据 库 没 有 关 闭 游 标
描 述 :
后 没 有 关 闭 的 情 C u r s o r 程 序 中 经 常 会 进 行 查 询 数 据 库 的 操 作 , 但 是 经 常 会 有 使 用 完 毕
的 况 。 如 果 我 们 的 查 询 结 果 集 比 较 小 , 对 内 存 的 消 耗 不 容 易 被 发 现 , 只 有 在 常 时 间 大 量 操 作
情 况 下 才 会 复 现 内 存 问 题 , 这 样 就 会 给 以 后 的 测 试 和 问 题 排 查 带 来 困 难 和 风 险 。
示 例 代 码 :
. . . ) ; g e t C o n t e n t R e s o l v e r ( ) . q u e r y ( u r i = c u r s o r C u r s o r
{ ( c u r s o r . m o v e T o N e x t ( ) ) i f
. . . . . .
}
修 正 示 例 代 码 :
n u l l ; = c u r s o r C u r s o r
{ t r y
. . . ) ; g e t C o n t e n t R e s o l v e r ( ) . q u e r y ( u r i = c u r s o r
{ c u r s o r . m o v e T o N e x t ( ) ) & & n u l l ! = ( c u r s o r i f
. . . . . .
}
{ f i n a l l y }
{ n u l l ) ! = ( c u r s o r i f
{ t r y
内 存 泄 漏 调 试A n d r o i d3
c u r s o r . c l o s e ( ) ;
{ e ) ( E x c e p t i o n c a t c h }
t h i s / / i g n o r e
}
}


2:述构造Adapter 没有使用缓存的 convertView


中 提 高 了 方 法 : B a s e A d a p t e r 为 例 , 在 B a s e A d a p t e r L i s t V i e w 以 构 造p a r e n t ) V i e w G r o u p c o n v e r t V i e w , V i e w p o s i t i o n , g e t V i e w ( i n t V i e w p u b l i c
根 中 B a s e A d a p t e r 会 从 L i s t V i e w 对 象 。 初 始 时 v i e w 所 需 要 的 i t e m 提 供 每 一 个 L i s t V i e w 来 向
来。 对 象 缓 存 起 v i e w 会 将 这 些 L i s t V i e w 对 象 , 同 时 v i e w 据 当 前 的 屏 幕 布 局 实 例 化 一 定 数 量 的
对 象 会 被 回 收 , 然 后 被 用 来 构 v i e w i t e m l i s t 时 , 原 先 位 于 最 上 面 的L i s t V i e w当 向 上 滚 动
二 的 第 g e t V i e w ( ) 方 法 完 成 的 , g e t V i e w ( ) 。 这 个 构 造 过 程 就 是 由i t e m l i s t造 新 出 现 的 最 下 面 的w v i e始 化 时 缓 存 中 没 有 初 ( 对 象 v i e w i t e m l i s t 就 是 被 缓 存 起 来 的 c o n v e r t V i e w V i e w个 形 参
n u l l ) c o n v e r t V i e w 对 象 则
化 中 重 新 实 例 g e t V i e w ( ) , 而 是 每 次 都 在 c o n v e r t V i e w 由 此 可 以 看 出 , 如 果 我 们 不 去 使 用l i s t回 收L i s t V i e w对 象 的 话 , 即 浪 费 资 源 也 浪 费 时 间 , 也 会 使 得 内 存 占 用 越 来 越 大 。V i e w一 个:对 象 的 过 程 可 以 查 看 v i e wi t e m
方 法 。 s c r a p ) a d d S c r a p V i e w ( V i e w v o i d - - > a n d r o i d . w i d g e t . A b s L i s t V i e w . j a v a
示 例 代 码 :
{ p a r e n t ) V i e w G r o u p c o n v e r t V i e w , V i e w p o s i t i o n , g e t V i e w ( i n t V i e w p u b l i c
X x x ( . . . ) ; n e w = v i e w V i e w
. . . . . .
v i e w ; r e t u r n
}
修 正 示 例 代 码 :
{ p a r e n t ) V i e w G r o u p c o n v e r t V i e w , V i e w p o s i t i o n , g e t V i e w ( i n t V i e w p u b l i c
n u l l ; = v i e w V i e w
{ n u l l ) ! = ( c o n v e r t V i e w i f
c o n v e r t V i e w ; = v i e w
g e t I t e m ( p o s i t i o n ) ) ; p o p u l a t e ( v i e w ,
. . .
{ e l s e }
X x x ( . . . ) ; n e w = v i e w
. . .
}
v i e w ; r e t u r n



3述 :
使 对 象 比 较 占 内 存 , 当 它 不 在 被 B i t m a p 对 象 , 如 果 一 个 B i t m a p 有 时 我 们 会 手 工 的 操 作
的, 方 法 回 收 此 对 象 的 像 素 所 占 用 的 内 存 , 但 这 不 是 必 须 B i t m a p . r e c y c l e ( ) 用 的 时 候 , 可 以 调 用
视 情 况 而 定 。 可 以 看 一 下 代 码 中 的 注 释 :
/ * *
t h e m a r k a n d p i x e l s , b i t m a p ' s t h i s w i t h a s s o c i a t e d m e m o r y t h e u p F r e e *
o r g e t P i x e l s ( ) i f e x c e p t i o n a n t h r o w w i l l i t m e a n i n g " d e a d " , a s b i t m a p *
b e c a n n o t o p e r a t i o n T h i s n o t h i n g . d r a w w i l l a n d c a l l e d , i s s e t P i x e l s ( ) *
n o a r e t h e r e s u r e a r e y o u i f c a l l e d b e o n l y s h o u l d i t s o r e v e r s e d , *
n e e d n o r m a l l y a n d c a l l , a d v a n c e d a n i s T h i s b i t m a p . t h e f o r u s e s f u r t h e r *
w h e n m e m o r y t h i s u p f r e e w i l l p r o c e s s G C n o r m a l t h e s i n c e c a l l e d , b e n o t *
b i t m a p . t h i s t o r e f e r e n c e s m o r e n o a r e t h e r e *
* /

   4:释 放 对 象 的 引 用 释 放 对 象 的 引 用 释 放 对 象 的 引 用 释 放 对 象 的 引 用 ) ) ) ) 四 四 四 四 ( ( ( (
描 述 :
这 种 情 况 描 述 起 来 比 较 麻 烦 , 举 两 个 例 子 进 行 说 明 。
A 示 例
假 设 有 如 下 操 作
{ A c t i v i t y e x t e n d s D e m o A c t i v i t y c l a s s p u b l i c
. . . . . .
. . . = m H a n d l e r H a n d l e r p r i v a t e
o b j ; O b j e c t p r i v a t e
{ o p e r a t i o n ( ) v o i d p u b l i c
i n i t O b j ( ) ; = o b j
. . .
[ M a r k ]
{ R u n n a b l e ( ) m H a n d l e r . p o s t ( n e w
{ r u n ( ) v o i d p u b l i c
u s e O b j ( o b j ) ;
}
} ) ;
}
}
p o s t 实 例 的 操 作 o b j 中 我 们 希 望 能 够 将 处 理 o p e r a t i o n ( ) , 在 o b j 我 们 有 一 个 成 员 变 量j o b所 在 的 线 程 使 用 完 了m H a n d l e r中 。 在 以 上 的 代 码 中 , 即 便 是M e s s a g e Q u e u e某 个 线 程 的
象 还 保 有 这 个 对 D e m o A c t i v i t y . o b j 所 引 用 的 对 象 , 但 这 个 对 象 仍 然 不 会 被 垃 圾 回 收 掉 , 因 为
的 的 位 置 释 放 对 象 [ M a r k ] 中 不 再 使 用 这 个 对 象 了 , 可 以 在D e m o A c t i v i t y的 引 用 。 所 以 如 果 在
内 存 泄 漏 调 试 A n d r o i d5
引 用 , 而 代 码 可 以 修 改 为 :
. . . . . .
{ o p e r a t i o n ( ) v o i d p u b l i c
i n i t O b j ( ) ; = o b j
. . .
o b j ; = o O b j e c t f i n a l
n u l l ; = o b j
{ R u n n a b l e ( ) m H a n d l e r . p o s t ( n e w
{ r u n ( ) v o i d p u b l i c
u s e O b j ( o ) ;
}
}
}
. . . . . .B : 示 例
信 如 ( 中 , 监 听 系 统 中 的 电 话 服 务 以 获 取 一 些 信 息( L o c k S c r e e n )假 设 我 们 希 望 在 锁 屏 界 面
的 对 象 , 同 时 将 它 注 册 到 P h o n e S t a t e L i s t e n e r 中 定 义 一 个 L o c k S c r e e n, 则 可 以 在)号 强 度 等
对 象 , 当 需 要 显 示 锁 屏 界 面 的 时 候 就 会 创 建 一 L o c k S c r e e n 服 务 中 。 对 于 T e l e p h o n y M a n a g e r
对 象 就 会 被 释 放 掉 。 L o c k S c r e e n 对 象 , 而 当 锁 屏 界 面 消 失 的 时 候L o c k S c r e e n
P h o n e S t a t e L i s t e n e r 对 象 的 时 候 忘 记 取 消 我 们 之 前 注 册 的 L o c k S c r e e n 但 是 如 果 在 释 放
无 法 被 垃 圾 回 收 。 如 果 不 断 的 使 锁 屏 界 面 显 示 和 消 失 , 则 最 终 会L o c k S c r e e n象 , 则 会 导 致
进 程 s y s t e m _ p r o c e s s 使 得 O u t O f M e m o r y , 对 象 没 有 办 法 被 回 收 而 引 起L o c k S c r e e n由 于 大 量 的
挂 掉 。
保 有 其 引 用 的 情 况 B , 被 一 个 生 命 周 期 较 长 的 对 象 A 总 之 当 一 个 生 命 周 期 较 短 的 对 象
的 引 用 。 A 中 清 除 掉 对 B 的 生 命 周 期 结 束 时 , 要 在 A 下 , 在
其 他 其 他 其 他 其 他 ) ) ) ) 五 五 五 五 ( ( ( (
的 生 命 周 期 中 , 在 A c t i v i t y 应 用 程 序 中 最 典 型 的 需 要 注 意 释 放 资 源 的 情 况 是 在A n d r o i d
方 法 中 需 要 适 当 的 释 放 资 源 的 情 况 。 由 于 此 情 况 很 基 础 ,o n D e s t r o y ( )o n S t o p ( ) o n P a u s e ( )
放 生 命 周 期 的 介 绍 , 以 明 确 何 时 应 该 释A c t i v i t y在 此 不 详 细 说 明 , 具 体 可 以 查 看 官 方 文 档 对
哪 些 资 源



 五 :
的 生 命 周 期 中 , 在 A c t i v i t y 应 用 程 序 中 最 典 型 的 需 要 注 意 释 放 资 源 的 情 况 是 在A n d r o i d
方 法 中 需 要 适 当 的 释 放 资 源 的 情 况 。 由 于 此 情 况 很 基 础 ,o n D e s t r o y ( )o n S t o p ( ) o n P a u s e ( )
放 生 命 周 期 的 介 绍 , 以 明 确 何 时 应 该 释A c t i v i t y在 此 不 详 细 说 明 , 具 体 可 以 查 看 官 方 文 档 对
哪 些 资 源


--------------------------------------------------------------------------------转载安卓内存泄露调试 作者:李文栋












0 0
原创粉丝点击