20

グーグルで調べてみると、この問題が何度も投稿されているのを見てきました。ここ数年、このフォーラムにいくつかの投稿がありました。まともな回答をする人を見たことがない。

this.StopSelf() を実行して 2 時間実行した後に自分自身を停止しようとするフォアグラウンド サービスがあります。バインド時と非バインド時で試してみました。AVD およびデバイス上。

それは単に機能しません。これは Android のバグですか?(2.3.3 を実行)。

サービス自体を停止するにはどうすればよいですか?

4

9 に答える 9

29

フォアグラウンド サービスを使用する場合は、次を呼び出す必要があります。

stopForeground(true);

で始めるのと同じようにstartForeground

stopSelf通常のサービスに使用するためのものです。フォアグラウンドサービスは特別です... :)

ところで、アプリが古いデバイスで動作する必要がある場合は、ここで提供されている互換性コードを確認する必要があります。

于 2013-08-26T18:45:40.180 に答える
11

私は同様の問題に遭遇しました。検索を通じて、他のアクティビティの onCreate メソッドでサービスをバインドしますが、 onDestory メソッドのバインドを解除しません。それを修正した後、stopSelf を呼び出すと、サービスの onDestory メソッドが呼び出されます。お役に立てば幸いです。

同時に、Android gover ドキュメントから base を見つけます。

サービスは、開始することも、接続をバインドすることもできます。このような場合、サービスが開始されているか、Context.BIND_AUTO_CREATE フラグを使用してサービスへの接続が 1 つ以上ある限り、システムはサービスを実行し続けます。これらの状況がいずれも成立しない場合、サービスの onDestroy() メソッドが呼び出され、サービスは事実上終了します。すべてのクリーンアップ (スレッドの停止、レシーバーの登録解除) は、onDestroy() から戻るときに完了する必要があります。

于 2016-09-29T05:54:00.647 に答える
3

それも機能しないというこの問題が発生しselfStop()ます。

理解すべき主な考え方は、サービスは停止しないということです。

実行中のループがまだ実行中の場合 (while(mDoWhile)たとえば)。

または、最初に破棄/登録解除する必要があるその他の問題。

stopSelf()orを機能させるにはstopService(intent)

サービス内に実装onDestroy()します。

@Override
public void onDestroy()
{
    // Unregistered or disconnect what you need to
    // For example: mGoogleApiClient.disconnect();

    // Or break the while loop condition
    // mDoWhile = false;

    super.onDestroy();
}
于 2016-02-08T21:27:21.423 に答える
3

私はこの問題を抱えていて、検索するとこのスレッドが見つかりました。私のアプリの問題は、サービスが stopSelf() を呼び出すときに、サービスをバインドするフォアグラウンド アクティビティがまだ実行されていることです。stopSelf が呼び出されますが、フォアグラウンド アクティビティがまだバインドされているため、サービスは破棄されません。[戻る] を押すか、ホーム画面に移動してアクティビティを終了すると、サービスが破棄されます。つまり、フォアグラウンド アクティビティがバインドされている場合、stopSelf は機能しません。

于 2015-06-01T04:34:56.887 に答える
0

私も同じ問題に直面していました。

ご存知のように、それServiceはアプリのUI Thread. したがって、それがThreadサービスのバックグラウンドで実行されていて、呼び出しているstopSelf()まで、それは機能しません。そのためには、Threadまずそれを停止してから実行する必要がありますstopSelf()

メソッドのすべてのバックグラウンドThreadを停止すると、Service stopSelf()確実に機能します。

于 2015-05-05T10:50:10.187 に答える