3

デバッグ モードで実行しているときに、サービス内にあるブレークポイントに到達できないようです。なぜですか?

    @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    context.startService(new Intent(context, UpdateService.class));
}

public static class UpdateService extends Service {

    @Override
    public void onStart(Intent intent, int startId) {
        // Build the widget update for today
        RemoteViews updateViews = buildUpdate(this);

        // Push update for this widget to the home screen
        ComponentName thisWidget = new ComponentName(this, WidgetProvider.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, updateViews);
    }

    public RemoteViews buildUpdate(Context context) {
        return new RemoteViews(context.getPackageName(), R.id.widget_main_layout);
    }


    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
4

3 に答える 3

2

マニフェストServiceに登録されていない可能性があります。またはAppWidgetProvider、マニフェストに登録されていない可能性があります。

于 2011-02-24T15:12:59.340 に答える
0

あなたがしていることにサービスを使用しないことを考えたいと思うかもしれません。updateViews() を 1 日に 1 回実行するだけの場合は、appwidget にリンクされている XML ファイルで android:updatePeriodMillis を 86400000 に設定することを検討してください。XML ファイルは次のようになります。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="72dp"
  android:maxWidth="72dp"
  android:updatePeriodMillis="86400000" >
</appwidget-provider>

これにより、Android が appwidget を 1 日 1 回更新し、バックグラウンドでサービスを実行することなく、ユーザーが実行しているタスク キラーによって強制終了され、ウィジェットの更新が停止する可能性があります。30 分ごとよりも速く更新する必要がある場合、その時点で android:updatePeriodMillis は機能しません (最小値は 30 分です)。AlarmManager を使用することをお勧めします。サービスであり、タスク キラーによって強制終了されることもありません。

于 2011-02-24T16:47:19.817 に答える