Mam dziwny problem, który ostatnio wystąpił. Wywołuję usługę o nazwie NotificationService, która rozszerza klasę IntentService. Teraz w metodzie onHandleIntent (Intent intent) wykonuję wywołanie zadania asynchronicznego. Kod jest podany poniżej:Klasa IntentService nie działa AsyncTask na głównym wątku interfejsu użytkownika. Wykonanie metody musi zostać wywołane z głównego wątku, aktualnie wnioskowany wątek to pracownik
@Override
protected void onHandleIntent(Intent intent) {
defPrefs = PreferenceManager.getDefaultSharedPreferences(this);
//int fiveMinutes = 1000 * 60 * 5;
//Setting an alarm to call AlarmScheduler service now. This alarm scheduler service will set next days alarm to show notifications
//based on the weekly schedule as obtained from server.
Intent i = new Intent(NotificationService.this, ScheduleAlarms.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getService(NotificationService.this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) NotificationService.this.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, Calendar.getInstance().getTimeInMillis(), pendingIntent);//Use AlarmManager.INTERVAL_DAY instead of int number here.
//Check if locally notifications are enabled by the user then only show notification depending on
//if there are any latest notifications to be shown.
if(defPrefs.getBoolean(getString(R.string.notifications),true)) {
NotificationAsyncTask httpAsyncTask1 = new NotificationAsyncTask();
httpAsyncTask1.mOnHttpResponseListener = new GetHomeResponse(intent);
httpAsyncTask1.execute("http://" + HttpAsyncTask.IP_ADDRESS + "/v5/getResult");
}else{
Log.v("NotificationService","Disabled");
}
}
Gdzie NotificationAsyncTask jest prywatną klasą zdefiniowaną w tej usłudze. Teraz otrzymuję błąd Metoda execute musi zostać wywołana z głównego wątku, aktualnie wnioskowany wątek jest pracujący. Nie rozumiem, jak ta metoda wykonywania nie działa w głównym wątku? Proszę pomóż.
Tak, nie potrzebuję AsyncTask. Nie myśl o tym wcześniej. Dzięki za podpowiedź. I jeszcze jedna rzecz w moich powiadomieniach chcę wyświetlać tylko dużą ikonę, więc jak mogę wyłączyć małą ikonę, ponieważ ustawienie małej ikony jest obowiązkowe (przy użyciu .setSmallIcon() w instancji NotificationCompat.Builder)? – FingerSmith
Wykonano także zadanie asynchroniczne, chociaż instrukcja execute została podkreślona w kolorze czerwonym. – FingerSmith
@ FingerSmith: "Także w moich powiadomieniach chcę pokazać tylko dużą ikonę" - musiałbyś zbudować własną mobilną operację system. Mała ikona pojawia się na pasku stanu, a jej obecność jest niezbywalna. – CommonsWare