【问题标题】:Service based app consuming high RAM on android基于服务的应用程序在 android 上消耗高 RAM
【发布时间】:2016-09-16 06:27:46
【问题描述】:

我的应用程序基于 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>

这有帮助,但后来我无法点击广告,点击广告无济于事,而且还导致了更多问题..就像我无法更新主题等等..

所以,现在我的应用程序输入速度太慢,并且大部分时间占用了大约 170-200 MB 的巨大 RAM。 我使用谷歌播放服务来显示广告和通知..这也是高内存消耗的原因..

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

这是一份来自 MAT 的报告:

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

【问题讨论】:

  • 我们不能提供除一般准则之外的细节。阅读本文,Investigate Ram

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


【解决方案1】:

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

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

【讨论】:

  • 那么当有新数据可用时要求用户刷新,而不是持续运行服务。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多