即使關閉應用程序,我也想從我的Firebase數據庫中讀取。如何創建即使在應用程序關閉時也能運行的線程或後臺任務。我需要它連接到互聯網。即使在關閉應用程序時也運行後臺任務
我還試圖用火力地堡雲消息傳遞收到通知,但我無法從手機X發送任何信息給手機Y.
即使關閉應用程序,我也想從我的Firebase數據庫中讀取。如何創建即使在應用程序關閉時也能運行的線程或後臺任務。我需要它連接到互聯網。即使在關閉應用程序時也運行後臺任務
我還試圖用火力地堡雲消息傳遞收到通知,但我無法從手機X發送任何信息給手機Y.
您將要創建即使應用程序被關閉運行的服務。
諮詢https://developer.android.com/guide/components/services.html或任何精美的服務教程。
如果您想定期檢查某些內容,請使用WakefulBroadcastReceiver。您可以從onReceive啓動服務並執行您想要的任務。任務完成後立即停止服務。與一直運行服務相比,這樣更加高效,並且可以節省電量。
public class MyReceiver extends WakefulBroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
if (!isServiceRunning(UpdateAppService.class, context)) {
Intent service = new Intent(context, MyService.class);
service.putExtra("source", "Reciever");
startWakefulService(context, service);
}
}
public void setAlarm(Context context, long syncTime) {
alarmMgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
syncTime, syncTime, alarmIntent);
}
public void cancelAlarm(Context context) {
if (alarmMgr != null) {
alarmMgr.cancel(alarmIntent);
}
}
public static boolean isServiceRunning(Class<?> serviceClass, Context context){
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
try {
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
return false;
}
}
你需要的是Firebase Job Dispatcher。
爲此運行服務並不是一個好主意,因爲操作系統可以殺死以在前臺優先處理應用程序。一個服務是一個很好的主意,可以創建可擴展的應用程序,這些應用程序在活動時需要後臺工作,例如音樂播放器或某個REST應用程序。
使用鬧鐘,AlarmManager耗費電池,並且不允許您爲所需設置限制,如果您只想在設備使用Wi-Fi時運行作業,該怎麼辦。另外,設備啓動時會丟失報警。
爲了做像捕捉網絡連接開發人員過去依賴BroadcastReceivers的東西,但由於API 25濫用了它,網絡連接不再可用。這就是爲什麼Android提供JobScheduler的原因,它的問題在於JobScheduler不兼容Retro,並且只能使用API 23及更高版本。昂貴的解決方案是使用JobScheduler和AlarmManager。
火力地堡工作Dispacther很像有條件的cron作業,它只會在條件滿足時執行,可以處理引導,可以執行一個或遞歸,是電池高效,時間之窗,一邊執行,一邊處理好。這曾經是GcmNetworkManager,現在更新。
Evernote做了一個類似的庫Android Job,但我寧願依靠Firebase和Google上的優秀人才。
請參閱https://stackoverflow.com/questions/42210186/handling-keepsynced-while-on-background-on-android-and-with-fcm/42210878#42210878以及更多此列表https:// stackoverflow。 COM /查詢q =%5Bfirebase%5D%5Bandroid%5D +背景 –