我跑遍了一段時間,但使用啓動的服務......或者說,不使用綁定服務時無法找到任何信息,最後調用()。有很多關於綁定服務的信息,但是我已經有了兩個非常大的「啓動服務」而沒有綁定,所以我不想修改現有的服務。Android的工作室 - 用服務調用最終()與FLAG_ACTIVITY_NEW_TASK
我的應用程序的工作原理是閱讀每10秒藍牙數據,並根據數據讀取時,服務將變成一個新的活動。但是,我無法從我的服務中調用final(),所以我擔心在應用程序/服務運行時可能無休止地堆疊活動。
要更改活動,我必須添加Intent.FLAG_ACTIVITY_NEW_TASK。考慮到開發人員頁面中的以下圖像/定義,此標誌看起來好像可能已經處理了我的堆疊問題?我不允許用戶使用手機上的後退按鈕,因爲通過確認/取消按鈕和服務處理所有事情。我的應用程序必須是這樣,有幾個原因。因此,保持堆棧順序對我的應用程序並不重要。
要點 -
- 我要確保我不會無休止地疊加起來活動開始新的活動
- 通過我的服務開始活動時,翹邊「新任務」的時候
- 堆棧順序對我的應用程序並不重要
下面是我的代碼的一個非常小的剪輯與評論來解釋我想要做什麼。請確保查看此服務的onDestroy()方法。
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;
}
}
通過推薦編輯使用Android:taskAffinity - 採用Android:taskAffinity不會幫助我在這種情況下。默認情況下,應用程序中的所有活動都具有相同的關聯性。當我在意圖標誌設置Intent.FLAG_ACTIVITY_NEW_TASK創建一個新的任務,新的活動將仍然是在同一個任務開始,如果該活動在任務根系活力相同taskAffinity。由於我只是使用默認親和力,所有東西都應該有正常的堆棧流。我只是不能打電話給finish(),這意味着我正在堆疊大量的活動。
您是否總是希望在背面堆疊上只有一個AlertActivity? – Sunhee
@Sunhee應用程序以「家庭服務」運行開始。當發現警報時,Home Service將停止,並隨着啓動「警報服務」一起創建新的活動。但是,警報服務期間可能會創建許多活動。通常情況下,警報屏幕發出警報,但會創建一個新的活動以定期更新。稍後,會發出「全部清除」信息,結束警報服務並重新啓動家庭服務和家庭活動。 – FoxDonut
如果您只想啓動一個AlertActivity,則必須在Manifest.xml上將android:taskAffinity和android:excludeFromRecents設置爲AlertActivity。 **但**,請向我展示您的資源,Home Service停止後創建的活動源和AlertActivity源? – Sunhee