In meiner App, wenn ich eine Push-Benachrichtigung erhalten möchte ich eine Webanforderung an den Server auslösen, um einige Daten zu aktualisieren. Dies ist meine Implementierung von IntentService.onHandleIntent()
, die aufgerufen wird, wenn ich einen Push erhalten:Runnable in Handler nicht ausgeführt, wenn aus einer Push-Benachrichtigung gepostet IntentService
@Override protected void onHandleIntent(Intent intent) {
final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
// ... notification setup
notificationManager.notify(Integer.parseInt(intent.getStringExtra("id")), notificationBuilder.build());
// Web request to the server to update data
syncData(this);
// Release the wake lock provided by the WakefulBroadcastReceiver.
PushNotificationsReceiver.completeWakefulIntent(intent);
}
public static void syncData(final Context content) {
new Handler().post(new Runnable() {
@Override public void run() {
// ... my web request
}
});
}
Es gibt keinen Grund, den Antrag in einem Runnable Lauf durch einen Handler in Einwickeln, aber die Tatsache ist, dass die runnable ausgeführt nicht. Ich habe sogar den Rückgabewert von überprüft, und es ist true
. Wenn ich syncData()
innerhalb einer Aktivität oder eines Fragments usw. aufruft, funktioniert es wie erwartet, aber nicht in diesem IntentService
. Warum ist das?
Wenn dies tun, anstatt, funktioniert alles richtig:
public static void syncData(final Context content) {
// ... my web request
}
für Ihre ausführliche Erklärung Vielen Dank durchführen soll. Es ist jetzt klar. Vielen Dank für die Problemumgehung, aber wie du gesagt hast, kann ich dort kein Netzwerk aufbauen. Also werde ich den Handler los, wie ich bereits gezeigt habe, jedenfalls habe ich dabei etwas Neues gelernt :) –