程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> gc concurrent-應用在屏幕鎖屏後再無響應

gc concurrent-應用在屏幕鎖屏後再無響應

編輯:編程綜合問答
應用在屏幕鎖屏後再無響應

最近做一個應用,log一直在打印

GC_CONCURRENT freed 433k,7% free 7975K/8564K,paused 12ms+4ms, total 70ms

類似這樣的信息。
這個應用在一直使用的情況下是沒有問題的,可是鎖屏大概1分鐘之後再回來,一種情況是應用直接沒有響應了,另一種情況是等很久(大概10秒左右)又能響應,等它能響應回來後,又可以正常工作了。
真是不知道是怎麼回事,從log信息看到雖然UI上面沒有響應,可是後台的service還在正常工作的。
是內存洩露嗎?因為從上面的GC_CONCURRENT看出,我只有7%的內存是free的,還是什麼別的原因引起的?
另外還有一個問題,就是我用一個繼承Application的類來管理activity的退出,在點擊退出按鍵的時候調用

public void exit() {
    Log.e(TAG, "exit in myapplication");
    for (Activity activity : activityList) {
        Log.e(TAG, activity.getLocalClassName()+ " finish");
        activity.finish();
    }
    System.exit(0);
}

這個函數,可是發現執行finish()方法後activity的onDestroy方法並沒有被調用,這是怎麼回事啊?

最佳回答:


你的應用鎖屏後無響應是內存洩漏造成的。

鎖屏之後不代表應用退出了,一般在鎖屏時將應用設置為後台運行會更好,試試saveInstanceStateonPause

對於android來說一般不鼓勵應用退出,這和手機型號也有一些關系。

補充:

重寫onSaveInstanceState,(savedInstanceState包),然後設置需要的應用狀態參數值。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // etc.

}

包本質上一個存儲NVP(屬性名-值對應)的方法地圖,並且會傳遞到你提取值的onCreateonRestoreInstanceState

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

這種方法也可以用到存儲應用實例值上面,比如未保存的文本。


看看這個鏈接:SavingPersistentState

兩個方法的文檔說明鏈接:
onCreate

onSaveInstanceState

Joyce_Qin_1986
Joyce_Qin_1986
Joyce_Qin_1986
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved