나는 widget
을 이미 가지고 있으며 매 5 초마다 그 위젯을 업데이트하는 service
을 가지고있는 응용 프로그램을 가지고 있습니다.AlarmManager LifeCycle 및 취소 오류
여기 내 AppWidgetProvider
입니다 :
public class MyWidget extends AppWidgetProvider {
PendingIntent service = null;
AlarmManager alarmManager;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final Intent i = new Intent(context, MyService.class);
if(service == null) {
service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
}
alarmManager.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(), 1000*5, service);
}
@Override
public void onDisabled(Context context) {
Log.d("LogTag", "onDisabled");
alarmManager.cancel(service);
service.cancel();
}
}
그리고 내 Service
:
public class MyService extends Service {
int b = 5;
@Override
public void onCreate() { super.onCreate(); }
public int onStartCommand(Intent intent, int flags, int startId) {
this.buildUpdate();
return 0;
}
private void buildUpdate() {
Log.d("AAA", "Update is coming");
RemoteViews rmViews = new RemoteViews(getPackageName(), R.layout.widget_layout);
rmViews.setTextViewText(R.id.hello, "Iterator: " + Integer.toString(b));
ComponentName thisWidget = new ComponentName(this, MyWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, rmViews);
b++;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Service
과 다른 일들이 잘됩니다. 하지만 여전히 나는이 모든 것들에 대한 몇 가지 질문을했습니다 :
setRepeating
방법의 매개 변수가SystemClock.elapsedRealtime()
을 위해 무엇? 시작할 때를 가리 킵니까?위젯을 삭제하려고하면 아래 오류가 표시되며 불행히도
AlarmManager
은 아직 취소되지 않습니다. 내가 뭘 놓치고 있니?위젯이 초기화 (또는 호출)되기 전에 일부 네트워크 작업을 수행해야합니다. 위젯에는 서버의 데이터가 있어야합니다.
AsyncTask
또는 무엇을 사용해야합니까?
나는 점점 위젯을 삭제하려고하면 :
03-04 23:39:51.428: E/AndroidRuntime(5646): Uncaught handler: thread main exiting due to uncaught exception
03-04 23:39:51.438: E/AndroidRuntime(5646): java.lang.RuntimeException: Unable to start receiver com.example.widget.MyWidget: java.lang.NullPointerException
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2646)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.app.ActivityThread.access$3100(ActivityThread.java:119)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.os.Looper.loop(Looper.java:123)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.app.ActivityThread.main(ActivityThread.java:4363)
03-04 23:39:51.438: E/AndroidRuntime(5646): at java.lang.reflect.Method.invokeNative(Native Method)
03-04 23:39:51.438: E/AndroidRuntime(5646): at java.lang.reflect.Method.invoke(Method.java:521)
03-04 23:39:51.438: E/AndroidRuntime(5646): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-04 23:39:51.438: E/AndroidRuntime(5646): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-04 23:39:51.438: E/AndroidRuntime(5646): at dalvik.system.NativeStart.main(Native Method)
03-04 23:39:51.438: E/AndroidRuntime(5646): Caused by: java.lang.NullPointerException
03-04 23:39:51.438: E/AndroidRuntime(5646): at com.example.widget.MyWidget(MyWidget.java:33)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:76)
03-04 23:39:51.438: E/AndroidRuntime(5646): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2637)
03-04 23:39:51.438: E/AndroidRuntime(5646): ... 10 more
감사합니다. AsyncTask를 아직 시도하지 않았지만 그것에 대한 단서를 얻었습니다. –