新しいアプリケーションでサービスを開始しました。サービスは通知付きでフォアグラウンドになっています。これをAVD 2.1 APIレベル7で実行すると、すべて正常に動作します。しかし、Gingerbreadを実行しているSamsung Galaxy Tabで実行すると、サービスが開始されます(通知エリアの上部にアイコンとアプリ名が表示されます)が、数秒後にサービスが消えます。私が見ることができるログの最後のエントリは、自分のアプリケーションに関連付けられています。私のLog.d( "タグライン"、 "START_STICKYを返す" + START_STICKY)の結果です。私のサービスのonStartCommandオーバーライドでは、次のように:START_STICKY、フォアグラウンドのAndroidサービスが予告なしに終了する
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int rc ;
Log.d("Taglines","onStartCommand()");
Toast.makeText(this, "Starting service TagsManager", Toast.LENGTH_SHORT).show();
Log.d("Taglines","Calling super.onStartCommand()");
rc = super.onStartCommand(intent,flags,startId);
Log.d("Taglines","super.onStartCommand return code was " + rc);
createNotification(INITIAL_NOTIFICATION_TEXT);
Log.d("Taglines","Returning with " + START_STICKY);
return START_STICKY ;
}
通知は、次のように設定されている:サービスが開始されたときに
これは、 "ADB logcat" からの結果である:
D/Taglines(21863): Starting service
D/Taglines(21863): TagsManager(nullary) completed
D/Taglines(21863): onStartCommand()
D/Taglines(21863): Calling super.onStartCommand()
D/Taglines(21863): super.onStartCommand eturn code was 2
D/Taglines(21863): createNotification called
D/Taglines(21863): Obtained reference to Notification Manager
D/Taglines(21863): createNotificacion() .. getApplicationContext
D/Taglines(21863): createNotificacion() ... passing notification
D/Taglines(21863): Starting foreground
D/Taglines(21863): Started
D/Taglines(21863): Returning with 1
その後、特別なことは何もありません(PID 21863から何もありません)。ちょうど束:
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
W/InputManagerService( 302): Window already focused, ignoring focus gain of: [email protected]
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
私はそれが、この場合に必要だとは思わないが、ここでのAndroidManifest.xmlの関連部分だ:私が間違っている場合があります
<service android:name=".TagsManager"
android:exported="false">
</service>
は?他にどんな情報を提供できますか?
Hmmm ...私はstartForegroundについてもっと読んでいます。実際に何らかのアクションを取るのではなく、通知オブジェクトにフラグを設定するようです。ですから、私はシーケンスを逆にしてstartForegroundがNotificationManager.notifyに先行するようにしました。これまでのところ、それはかなり良く見えています。だから今私はそれを他の方法でやってくれたその例を探しています... – Dennis
悲しいことに、そのシーケンスを逆転させることの成功は短命でした。スティッキーが「固執する」かどうかについての賭けのビットであるように思えます。 _many_何十ものこのサービスを開始しようと試みて、私はそれまで3回始まっています。 : – Dennis
まあ、あなたのギャラクシータブはメモリ不足の状態でしたか、おそらくあなたのサービスはメインスレッドで何かメモリ集中をしていましたか? –