12

Androidランチャー(ホーム画面の置換)アプリケーションを開発していて、メモリ不足の状況でランチャーが強制終了されます。ユーザーが家に戻って待たなければならない場合、これは明らかに良くありません。

私の調査では、Androidがプロセスを最高から最低までいくつかの優先度グループに分類していることがわかりました。

システム

持続的

前景

見える

知覚できる

サービス

Bサービス

バックグラウンド

次のコマンドを実行することで、どのプロセスがどのプロセスに該当するかを調べることができます。adb shell dumpsys meminfo

このトピックに関して私が見つけた最も包括的なドキュメントは次のとおりです。http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

ただし、上記のすべてのグループを明確に把握できるわけではありません。具体的には、

  1. プロセスはどのように/いつ「知覚可能」と見なされますか?一部のアプリ(Go Launcher EXなど)は、フォアグラウンドにないときにこのカテゴリにとどまる方法を理解しているようです。このように、それは頻繁に殺されることはありません。彼らはそれをどのようにやっていますか?

    adb shell dumpsysアクティビティから、GoLauncherExがフォアグラウンドサービスと見なされていることがわかりました。このテーマに関して私が見つけることができる唯一のドキュメントは、ステータスバーに永続的な通知を置く必要があると述べています。しかし、GoLauncherExはどういうわけかこの要件を回避しました。私はどのように道に迷っています:-(

  2. 「Aサービス」、「ホーム」、「Bサービス」の違いは何ですか?

  3. 通常のアプリよりも高い優先度を取得する方法に関するランチャーアプリケーションに関するその他の一般的なアドバイスはありますか?ランチャーはユーザーにとってほとんどのもの(現在のフォアグラウンドアクティビティを除く)よりも優先度が高いと見なされるべきであることを考えると、これは完全に正当な要求だと思います。

4

2 に答える 2

11

質問1)と3)に答えるために、優先順位が認識できるアプリケーションを実際に確認できる
場合は、通知を作成します。logcat -b eventsただし、すべてのプロパティ(contentViewも含む)はnullに設定されます。
したがって、同じ問題の調査で、空の通知を作成し、それを使用してサービスを開始しようとしました。

startForeground(42, new Notification())

そしてvoilà:logcatは言う:

I/notification_enqueue( 1607): [my.testapp.TestApp,42,NULL,Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 kind=[null])]

およびdumpsysmeminfo:

...
17539 kB: Perceptible  
     ...  
     6164 kB: my.testapp.TestApp (pid 25573)  
...

これは意図されたものではないと思います。本当に必要な場合にのみ使用する必要があることを理解してください。私はこれを使っているすべてのひどいサービスを想像したくありません。

于 2012-12-17T10:03:53.517 に答える
0

参照したドキュメントによると、ランチャーで優先度の高い長期サービスを開始して、KILL 回のパフォーマンスを確認できます。

于 2012-12-05T01:47:43.430 に答える