亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

哪些Android工具和方法最適合查找內存/資源泄漏?

哪些Android工具和方法最適合查找內存/資源泄漏?

森林海 2019-08-03 03:03:26
哪些Android工具和方法最適合查找內存/資源泄漏?我已經開發了一個Android應用程序,我的手機應用程序開發的時候,一切看起來都很好,你想宣布勝利和出海,但你知道,那里必須有一些內存和資源泄漏;在Android上只有1600萬b堆,而且它顯然很容易在Android應用程序中泄漏。我一直在尋找,到目前為止,只能挖掘‘hprof’和‘traceview’的信息,沒有得到很多好評。您遇到或開發了哪些工具或方法,并希望在OS項目中共享這些工具或方法?
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

如果您只是使用位圖背景,那么@hp.android的答案很好,但是,在我的例子中,我有一個BaseAdapter提供一套ImageViewS代表aGridView..我修改了unbindDrawables()方法,以便條件是:

if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
  ...}

但是問題是,遞歸方法從不處理AdapterView..為了解決這一問題,我做了以下工作:

if (view instanceof ViewGroup) {
  ViewGroup viewGroup = (ViewGroup) view;
  for (int i = 0; i < viewGroup.getChildCount(); i++)
    unbindDrawables(viewGroup.getChildAt(i));

  if (!(view instanceof AdapterView))
    viewGroup.removeAllViews();}

使孩子們AdapterView仍然被處理-該方法只是不嘗試刪除所有的子級(這是不支持的)。

然而,這并不能完全解決這個問題,因為ImageViewS管理一個不是他們背景的位圖。因此,我補充如下。這并不理想,但有效:

if (view instanceof ImageView) {
  ImageView imageView = (ImageView) view;
  imageView.setImageBitmap(null);}

總體上unbindDrawables()方法是:

private void unbindDrawables(View view) {
  if (view.getBackground() != null)
    view.getBackground().setCallback(null);

  if (view instanceof ImageView) {
    ImageView imageView = (ImageView) view;
    imageView.setImageBitmap(null);
  } else if (view instanceof ViewGroup) {
    ViewGroup viewGroup = (ViewGroup) view;
    for (int i = 0; i < viewGroup.getChildCount(); i++)
    unbindDrawables(viewGroup.getChildAt(i));

    if (!(view instanceof AdapterView))
      viewGroup.removeAllViews();
  }}

我希望有一個更有原則的方法來釋放這些資源。




查看完整回答
反對 回復 2019-08-05
  • 3 回答
  • 0 關注
  • 298 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號