2

「GoPowerMaster」などのアプリを使用して、Androidスマートフォンで実行されているサービスを強制的に強制終了すると、すべてのサービスが同じ遅延で再起動するわけではありません。これはなぜですか。また、サービスの再起動にかかる時間を短縮するにはどうすればよいですか。

Facebookサービスは完璧な例です。以下は、3回連続で殺されたときのLogCatの出力です。太字の再起動時間に注意してください:14992ms、5000ms、14963ms。

私のサービスはあまりよく扱われていません。以下は、3回連続で殺されたときのLogCatの出力です。太字で示されているはるかに長い再起動時間に注意してください:23358ms、93432ms、373728ms。

このプロジェクトの完全なソースコードはGitHubにあります。 https://github.com/ccoffey/NUIMWiFi

Facebook LogCat

05-10 14:09:33.381:I / ActivityManager(192):proc 7280:com.facebook.katana / 10077を強制終了:バックグラウンドを強制終了05-10 14:09:33.381:W / ActivityManager(192):クラッシュの再起動をスケジュール14992msのサービスcom.facebook.katana/ .service.MediaUploadService 05-10 14:09:48.412:I / ActivityManager(192):サービスcom.facebook.katana /.service.MediaUploadServiceのproccom.facebook.katanaを開始します:pid = 7847 uid = 10077 gids = {3003、1006、1015 } 05-10 14:09:48.568:I / ActivityThread(7847):Pub com.facebook.katana.provider.LoggingProvider:com.facebook.katana.provider.LoggingProvider 05-10 14:09:48.592:I / ActivityThread( 7847):パブcom.facebook.katana.provider.KeyValueProvider:com.facebook.katana.provider.KeyValueProvider 05-10 14:09:48.592:I / ActivityThread(7847):パブcom.facebook.katana.provider.CacheProvider: com.facebook.katana.provider.CacheProvider 05-10 14:09:48.592:I / ActivityThread(7847):Pub com.facebook.katana.provider.MailboxProvider:com.facebook.katana.provider.MailboxProvider 05-10 14: 09:48.599:I / ActivityThread(7847):Pub com.facebook.katana.provider.UserStatusesProvider:com.facebook.katana。Provider.UserStatusesProvider 05-10 14:09:48.599:I / ActivityThread(7847):Pub com.facebook.katana.provider.EventsProvider:com.facebook.katana.provider.EventsProvider 05-10 14:09:48.607:I / ActivityThread(7847):パブcom.facebook.katana.provider.NotificationsProvider:com.facebook.katana.provider.NotificationsProvider 05-10 14:09:48.607:I / ActivityThread(7847):パブcom.facebook.katana.provider。 UserValuesProvider:com.facebook.katana.provider.UserValuesProvider 05-10 14:09:48.607:I / ActivityThread(7847):Pub com.facebook.katana.provider.PagesProvider:com.facebook.katana.provider.PagesProvider 05-10 14:09:48.607:I / ActivityThread(7847):パブcom.facebook.katana.provider.MobileEventLogProvider:com.facebook.katana.provider.MobileEventLogProvider 05-10 14:09:48.607:I / ActivityThread(7847):パブcom.facebook.katana.provider.PushNotificationsProvider:com。facebook.katana.provider.PushNotificationsProvider 05-10 14:09:48.615:I / ActivityThread(7847):Pub com.facebook.katana.provider.PhotosProvider:com.facebook.katana.provider.PhotosProvider 05-10 14:09: 48.615:I / ActivityThread(7847):パブcom.facebook.katana.provider.ConnectionsProvider:com.facebook.katana.provider.ConnectionsProvider 05-10 14:09:48.623:I / ActivityThread(7847):パブcom.facebook。 orca.notify.FbandroidMessagesForegroundProvider:com.facebook.orca.notify.FbandroidMessagesForegroundProvider 05-10 14:09:48.639:D / ACRA(7847):ACRAはcom.facebook.katanaに対して有効になっており、初期化しています... 05-10 14: 09:48.654:D / ACRA(7847):/data/data/com.facebook.katana/app_acraでエラーファイルを探しています-レポート05-10 14:09:48.701:W / nalizableReferenceQueue(7847):com.facebookで.orca.inject.binder.AnnotatedBindingBuilderImpl.a(AnnotatedBindingBuilderImpl.java:22)05-10 14:09:48.701:W / nalizableReferenceQueue(7847):com.facebook.orca.app.FbBaseModule.a(FbBaseModule.java:73)05-10 14:09:48.701:W / nalizableReferenceQueue( 7847):com.facebook.orca.inject.AbstractModule.a(AbstractModule.java:19)05-10 14:09:48.701:W / nalizableReferenceQueue(7847):com.facebook.orca.inject.FbInjectorImpl.a (FbInjectorImpl.java:61)05-10 14:09:48.701:W / nalizableReferenceQueue(7847):com.facebook.orca.inject.FbInjectorImpl。(FbInjectorImpl.java:41)05-10 14:09:48.701: W / nalizableReferenceQueue(7847):com.facebook.orca.inject.FbInjector.a(FbInjector.java:40)05-10 14:09:48.701:W / nalizableReferenceQueue(7847):com.facebook.katana.FacebookApplication .onCreate(FacebookApplication.java:75)05-10 14:09:48.928:I / SqliteDatabaseCpp(7847):sqliteが返されました:エラーコード= 21msg = [8609a15dfa]の行105099での誤用、db = /data/data/com.facebook.katana/databases/prefs_db 05-10 14:09:53.810:I / ActivityManager(192):proc 7847:com.facebookを強制終了.katana / 10077:バックグラウンドを強制終了05-10 14:09:53.810:W / ActivityManager(192):クラッシュしたサービスの再起動をスケジュールするcom.facebook.katana / .service.MediaUploadService in5000ms 05-10 14:09:58.842:I / ActivityManager(192):サービスcom.facebook.katana /.service.MediaUploadServiceのproccom.facebook.katanaを開始します:pid = 7890 uid = 10077 gids = {3003、1006、1015 } 05-10 14:09:59.053:I / ActivityThread(7890):Pub com.facebook.katana.provider.LoggingProvider:com.facebook.katana.provider.LoggingProvider 05-10 14:09:59.060:I / ActivityThread( 7890):パブcom.facebook.katana.provider.KeyValueProvider:com.facebook.katana.provider.KeyValueProvider 05-10 14:09:59.060:I / ActivityThread(7890):パブcom.facebook.katana.provider.CacheProvider: com.facebook.katana.provider.CacheProvider 05-10 14:09:59.076:I / ActivityThread(7890):Pub com.facebook.katana.provider.MailboxProvider:com.facebook.katana.provider.MailboxProvider 05-10 14: 09:59.076:I / ActivityThread(7890):Pub com.facebook.katana.provider.UserStatusesProvider:com.facebook.katana。Provider.UserStatusesProvider 05-10 14:09:59.076:I / ActivityThread(7890):Pub com.facebook.katana.provider.EventsProvider:com.facebook.katana.provider.EventsProvider 05-10 14:09:59.076:I / ActivityThread(7890):パブcom.facebook.katana.provider.NotificationsProvider:com.facebook.katana.provider.NotificationsProvider 05-10 14:09:59.076:I / ActivityThread(7890):パブcom.facebook.katana.provider。 UserValuesProvider:com.facebook.katana.provider.UserValuesProvider 05-10 14:09:59.076:I / ActivityThread(7890):Pub com.facebook.katana.provider.PagesProvider:com.facebook.katana.provider.PagesProvider 05-10 14:09:59.084:I / ActivityThread(7890):パブcom.facebook.katana.provider.MobileEventLogProvider:com.facebook.katana.provider.MobileEventLogProvider 05-10 14:09:59.084:I / ActivityThread(7890):パブcom.facebook.katana.provider.PushNotificationsProvider:com。facebook.katana.provider.PushNotificationsProvider 05-10 14:09:59.084:I / ActivityThread(7890):Pub com.facebook.katana.provider.PhotosProvider:com.facebook.katana.provider.PhotosProvider 05-10 14:09: 59.084:I / ActivityThread(7890):パブcom.facebook.katana.provider.ConnectionsProvider:com.facebook.katana.provider.ConnectionsProvider 05-10 14:09:59.092:I / ActivityThread(7890):パブcom.facebook。 orca.notify.FbandroidMessagesForegroundProvider:com.facebook.orca.notify.FbandroidMessagesForegroundProvider 05-10 14:09:59.154:D / ACRA(7890):ACRAはcom.facebook.katanaに対して有効になっており、初期化しています... 05-10 14: 09:59.185:D / ACRA(7890):/data/data/com.facebook.katana/app_acra-reports 05-10 14:09:59.232でエラーファイルを探しています:W / nalizableReferenceQueue(7890):com.facebookで.orca.inject.binder.AnnotatedBindingBuilderImpl.a(AnnotatedBindingBuilderImpl.java:22)05-10 14:09:59.232:W / nalizableReferenceQueue(7890):com.facebook.orca.app.FbBaseModule.a(FbBaseModule.java:73)05-10 14:09:59.232:W / nalizableReferenceQueue( 7890):com.facebook.orca.inject.AbstractModule.a(AbstractModule.java:19)05-10 14:09:59.232:W / nalizableReferenceQueue(7890):com.facebook.orca.inject.FbInjectorImpl.a (FbInjectorImpl.java:61)05-10 14:09:59.232:W / nalizableReferenceQueue(7890):com.facebook.orca.inject.FbInjectorImpl。(FbInjectorImpl.java:41)05-10 14:09:59.232: W / nalizableReferenceQueue(7890):com.facebook.orca.inject.FbInjector.a(FbInjector.java:40)05-10 14:09:59.232:W / nalizableReferenceQueue(7890):com.facebook.katana.FacebookApplication .onCreate(FacebookApplication.java:75)05-10 14:10:44.826:I / ActivityManager(192):proc 7890:com.facebook.katana / 10077を強制終了します:キルバックグラウンド05-1014:10:44.826:W / ActivityManager(192):クラッシュしたサービスの再起動をスケジュールするcom.facebook.katana / .service.MediaUploadService in14963ms

MyService LogCat

I / ActivityManager(192):proc 8556:ie.cathalcoffey.android / 10033を強制終了:バックグラウンドを強制終了I / ActivityManager(192):proc 8606:ie.cathalcoffey.android:remote / 10033を強制終了:背景W / ActivityManager(192)を強制終了:クラッシュしたサービスie.cathalcoffey.android/.MyServiceの再起動を23358msでスケジュールする I / ActivityManager(192):proc ie.cathalcoffey.android:remote for service ie.cathalcoffey.android/.MyService:pid = 8726 uid = 10033 gids = {3003} I / ActivityManager(192):proc 8726:ie.cathalcoffey.android:remote / 10033を強制終了:バックグラウンドを強制終了W / ActivityManager(192):クラッシュしたサービスie.cathalcoffey.android/.MyServiceの再起動を93432msでスケジュール I / ActivityManager(192):proc ie.cathalcoffey.android:remote for service ie.cathalcoffey.android / .MyService:pid = 9063 uid = 10033 gids = {3003} I / ActivityManager(192):Killing proc 9063:ieを開始します.cathalcoffey.android:remote / 10033:バックグラウンドを強制終了W / ActivityManager(192):クラッシュしたサービスの再起動をスケジュールするie.cathalcoffey.android/.MyService in 373728ms

4

3 に答える 3

3

この問題の解決策は次のようです。作業を行っていたサービスを強制終了したとOSに認識させます。その後、より短い遅延でそのサービスを再起動するように見えます。

これで、サービスを編集して、永久にループし、Thread.sleep(100)を呼び出すAsyncTaskを開始しました。

サービスを強制的に強制終了すると、Facebookサービスの場合と非常によく似た再起動時間が表示されます:5000ms、24713ms、14997ms、54912ms、14988ms。

私が間違っているか正しいかを証明してください。しかし、現状では、これで問題が解決したようです。

于 2012-05-12T22:34:10.740 に答える
1

それは殺されたプロセスの重要性に大きく依存していると思います。タスクキラーを使用してアプリケーションを強制終了すると、Android OSは、システムのメモリが不足している場合と同じようにアプリケーションを強制終了します。同じ方法で強制終了されるため、アプリケーションまたはサービスは、アプリケーションの「重要性」に基づいてAndroidOSによって再起動されます。

サービスをより重要にする(したがって、より迅速に再起動する)ために、サービスに通知を追加できます。この通知は通知バーに表示されます。サービスはユーザーに表示されていたため、表示されなかったアプリケーションやその他のサービスよりも迅速に再起動されます。

また、アクティビティにバインドされているサービスは、バインドされていないサービスよりも重要になります。

詳細については、このhttp://developer.android.com/guide/topics/fundamentals/processes-and-threads.html(プロセスライフサイクル部分)を確認してください。

編集実行中のすべてのプロセスの重要性を取得します。

List<RunningAppProcessInfo> procInfo = activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfo.size(); i++){
    int importance = procInfo.get(i).importance;
    //Print importance and Package name to log
}
于 2012-05-10T13:35:01.153 に答える
0
        W/ActivityManager: Scheduling restart of crashed service com.faceopen.edgedevice/.service.FaceOpenRemoteService in 1000ms
        W/ActivityManager: Scheduling restart of crashed service com.faceopen.edgedevice/.service.FaceOpenRemoteService in 4000ms
        W/ActivityManager: Scheduling restart of crashed service com.faceopen.edgedevice/.service.FaceOpenRemoteService in 16000ms
        W/ActivityManager: Scheduling restart of crashed service com.faceopen.edgedevice/.service.FaceOpenRemoteService in 64000ms
        W/ActivityManager: Scheduling restart of crashed service com.faceopen.edgedevice/.service.FaceOpenRemoteService in 256000ms

強制終了されたプロセスを再開すると、Galaxyタブで同様の問題に直面していました。上記は、プロセスを再開するためにAndroidOSカーネルによって割り当てられた期間を示すログです。上記の場合のスケジューリング期間は、プロセスが再開されるとすぐにプロセスが繰り返し強制終了されると、指数関数的に増加しました。

ただし、OSによるプロセススケジューリングのパターンを分析すると、一定の時間が経過すると、OSは強制終了されたプロセスのスケジューリングの優先順位を下げるのをやめるという結論に達します。

私たちの場合、固定時間は60000ms(60秒)でした。つまり、60秒後にkillプロセスを再開すると、1000ms後に開始されていました。したがって、OSはその後プロセスを指数関数的にスケジュールしません。

于 2021-02-05T14:37:09.003 に答える