2016-09-16 60 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

然后代替持续运行该服务,请求用户刷新每当新数据可用时。 –