2016-09-16 58 views
0

我的應用程序基於InputMethodService,它是一個自定義的鍵盤應用程序..我們在服務中顯示服務器在此應用程序中的不同標籤,圖像,GIF,谷歌廣告,新聞等。 我的應用程序消耗高RAM。這個程序是使設備緩慢...... 我已經清除每個列表,使用後的ArrayList ..基於服務的應用程序在Android上消費高RAM

我試圖把我的服務在不同的進程這樣

<service 
      android:name="services.Myservice" 
      android:description="@string/app_name" 
      android:permission="android.permission.BIND_INPUT_METHOD" 
      android:process=":myprocess"> 

      <intent-filter> 
       <action android:name="android.view.InputMethod" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.view.im" 
       android:resource="@xml/method" /> 
     </service> 

它可以幫助,但然後我無法得到onclick的廣告,點擊廣告無所事事,這也造成了更多的問題..就像我無法更新主題和所有..

所以,現在我的應用程序太慢打字,大部分時間在170-200MB左右都會佔用大量的RAM。 我用谷歌播放服務顯示廣告和通知..這也是高內存消耗的原因..

但有很多應用程序具有所有這些功能..他們如何管理內存?

這裏是MAT的報告:

enter image description here

請幫我在這! 期待建議!

+0

除了一般指導原則外,我們不能提供具體細節。閱讀本文,[調查Ram](https://developer.android.com/studio/profile/investigate-ram.html) –

回答

0

有很多方法可以減少內存消耗。

  1. 使用proguard來模糊不需要的代碼。 Link
  2. 您也可以使用棉絨清潔劑。這將刪除由Android lint報告的未使用資源,包括字符串,顏色和尺寸。 Link
  3. 從gradle中刪除未使用的外部庫。
  4. 謹慎使用服務電話。無論何時需要新數據,您都可以選擇刷新數據(如果可能)。
  5. 釋放未使用的xml和java資源,或者在onDestroy()被調用時釋放它們。 Link1Link2
  6. 請記住在查詢數據庫後關閉遊標。如果要長期保持光標打開狀態,則必須謹慎使用並在數據庫任務完成後儘快關閉它。 另外,請記得在調用registerReceiver()後調用unregisterReceiver()。 Link
+0

已經使用proguard,lint ... –

+0

然後代替持續運行該服務,請求用戶刷新每當新數據可用時。 –