基于服务的应用程序在Android上消耗高RAM

时间:2016-09-16 06:27:47

标签: android memory-management service ram custom-keyboard

我的应用程序基于InputMethodService,它是一个自定义键盘应用程序..我们在服务中显示此应用程序中服务器的不同选项卡,图像,GIF,谷歌广告,新闻等。 我的应用程序正在消耗高RAM。这个应用程序使设备变慢... 我已经清理了每个列表,使用后的arraylist .. ..

我尝试将我的服务放在不同的流程中

<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>

这有帮助,但后来我无法点击广告,点击广告什么也没做,这也导致了更多的问题..就像我无法更新主题和所有..

所以,现在我的应用程序输入速度太慢,而且大多数时候它占用的RAM大约为170-200 MB。 我使用谷歌播放服务来显示广告和通知..这也是高RAM消耗的原因..

但是有许多应用程序具有所有这些功能。他们如何管理RAM?

以下是MAT的报告:

enter image description here

请帮帮我!! 期待提出建议!!

1 个答案:

答案 0 :(得分:0)

有许多方法可以减少内存消耗。

  1. 使用proguard来混淆不需要的代码。 Link
  2. 您也可以使用棉绒清洁剂。这将删除Android lint报告的未使用资源,包括字符串,颜色和尺寸。 Link
  3. 从gradle中删除未使用的外部库。
  4. 谨慎使用服务电话。只要需要新数据,您就可以为用户提供刷新数据的选项(如果可能)。
  5. 在未使用时释放未使用的xml和java资源,或者在调用onDestroy()时简单地释放它们。 Link1 Link2
  6. 请记住在查询数据库后关闭光标。如果要长期保持光标打开,则必须小心使用它,并在数据库任务完成后立即将其关闭。 另外,请记住在调用registerReceiver()之后调用unregisterReceiver()。 Link