1

私のAndroidアプリは、フォアグラウンドサービスでもバックグラウンドで殺されていました。サービスのマニフェスト エントリは次のとおりです。

 <service
            android:name=".MyService"
            android:icon="@drawable/icon"
            android:label="TritonHK"
            android:process=":my_process" >
        </service>

これがサービスのコードです

 MLog.w(getClass().getName(), "TritonHK started");

         Notification note=new Notification(R.drawable.icon,
                                             "TritonHK is running",
                                             System.currentTimeMillis());
         Intent i=new Intent(this, BGMessages.class);

         i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);

         PendingIntent pi=PendingIntent.getActivity(this, 0,
                                                     i, 0);

         note.setLatestEventInfo(this, "TritonHK",
                                 "TritonHK",
                                 pi);
         note.flags|=Notification.FLAG_NO_CLEAR;

         startForeground(1337, note);

そして、これが私がサービスを開始する方法です:

Intent i=new Intent(this, MyService.class);

        startService(i);

最初のアクティビティの onCreate でサービスを開始しています。

マニフェストでサービスから削除することで、このバグを克服し android:process=":my_process"ました。現在は次のようになっています。

 <service
                android:name=".MyService"
                android:icon="@drawable/icon"
                android:label="TritonHK"
                 >
            </service>

しかし今、私は興味深い問題に直面しています。

デバイスにアプリをインストールし、インストールが成功した後done、アイコンをクリックしてアプリを起動すると、正常に動作します。

しかし、インストールが成功した後、openボタンをクリックしてアプリを起動すると、初めてバックグラウンドで強制終了されました。次に、アプリを強制終了してアイコンから再度起動すると、正常に動作します。

私は何がうまくいかないのか困惑しています。私を助けてください

4

2 に答える 2

0

リソースの状況に基づいて、サービスが強制終了されます。インストーラーがまだ実行されている場合は、ユーザーに表示されるため、もちろん優先度が高くなります。インストーラーからopenでサービスを開始する際のメモリ消費を確認しましたか?

于 2013-02-07T11:57:15.000 に答える
0

次のコードで問題を解決し、同じものを投稿して、他の人もこれを使用できるようにしました。

以下のコードをランチャー アクティビティの作成時に追加しました。

if (!isTaskRoot()) {
            final Intent intent = getIntent();
            final String intentAction = intent.getAction();
            if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) &&
                    intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
                finish();
            }
        }
于 2013-02-12T05:20:33.400 に答える