私はずっとスカウトしていますが、開始されたサービスを使ってfinal()を呼び出したり、バインドされたサービスを使用していないときは情報を見つけることができません。バインドされたサービスにはたくさんの情報がありますが、私はすでに2つの大きな「開始済みサービス」をバインディングなしで持っているため、絶対に必要以上に既存のサービスを変更したくありませんでした。Androidスタジオ - サービスを使用してfinal()とFLAG_ACTIVITY_NEW_TASKを呼び出す
私のアプリは、10秒ごとにBluetoothデータを読み取って動作し、読み取られたデータに応じて、サービスは新しい動作に変更されます。しかし、私は私のサービスからfinal()を呼び出すことはできませんので、アプリケーション/サービスの実行中に無限にアクティビティを積み重ねる恐れがあります。
アクティビティを変更するには、Intent.FLAG_ACTIVITY_NEW_TASKを追加する必要がありました。開発者のページの下の画像/定義を考慮すると、この旗は既にスタッキングの問題を処理しているようですね。私はすべてが確認/キャンセルボタンとサービスを介して処理されるので、ユーザーは自分の携帯電話で戻るボタンを使用することはできません。私のアプリはいくつかの理由でこの方法でなければなりません。したがって、スタックの順序を維持することは私のアプリケーションにとって重要ではありません。
キーポイント - 私のサービスを経由して活動を開始するときに「新しいタスクを」フラグを付ける新たな活動
- スタックの順序は私のアプリケーションにとって重要ではありません
以下は私がしようとしていることを説明するためのコメント付きの私のコードのごく一部です。このサービスのonDestroy()メソッドを確認してください。アンドロイドを使用して - taskAffinity:taskAffinityは、このような状況で私を助けにはなりませんアンドロイドを使用するための勧告を経由して
public class AlertService extends Service {
final class Threader implements Runnable{
// Scans bluetooth advertisement packets every 10 seconds
// Thread Runs until interrupted
// Stops service via service ID
stopSelf(this.serviceID);
}
@Override
public void onCreate(){
super.onCreate();
}
// Runs a thread until alert is found.
// Alert calls thread.interrupt()
@Override
public int onStartCommand(Intent intent, int flags, int startID){
enableBluetooth();
// Start Thread
thread = new Thread(new Threader(startID));
thread.start();
return START_STICKY;
}
@Override
public void onDestroy(){
thread.interrupt();
Intent alertActivity = new Intent(this, AlertActivity.class)
alertActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(alertActivity);
}
// Unused Method - We will not be binding
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
EDIT。デフォルトでは、アプリケーション内のすべてのアクティビティは同じ親和性を持ちます。インテントフラグにIntent.FLAG_ACTIVITY_NEW_TASKを設定して新しいタスクを作成すると、そのアクティビティがそのタスクのルートアクティビティと同じtaskAffinityを持つ場合、新しいアクティビティは同じタスクで開始されます。私はちょうど既定の親和性を使用しているので、すべてが通常のスタックフローを持つ必要があります。私はfinish()を呼び出すことはできません。つまり、私はたくさんのアクティビティを積み上げています。
いつでも戻ってスタック上に一つだけAlertActivityを持つようにしたいですか? – Sunhee
@Sunheeアプリケーションは "Home Service"が起動して開始します。アラートが見つかると、ホームサービスが停止し、新しいアクティビティが作成され、「アラートサービス」が開始されます。ただし、アラートサービス中に多くのアクティビティが作成されることがあります。通常、アラート画面でアラートが発行されますが、定期的な更新を行うために新しいアクティビティが作成されます。その後、アラートサービスが終了し、ホームサービスとホームアクティビティが再開され、「すべてクリア」というメッセージが表示されます。 – FoxDonut
AlertActivityを1つしか起動しない場合は、Manifest.xmlでandroid:taskAffinityとandroid:excludeFromRecentsをAlertActivityに設定する必要があります。 **しかし、**、あなたのソース、ホームサービスが停止しAlertActivityソースの後に作成された活動ソースを表示してください? – Sunhee