0

私はこのウィジェットを持っており、2秒または1分間隔で更新されます。

画面にウィジェットを追加した後、PreferencesActivityが起動し、ユーザーがすべてが正しく設定されていると判断すると、設定を終了し、メソッドを呼び出します。

public class MyWidgetConfiguration extends PreferenceActivity {
    // [...] Some code...

    private void createWidget() {
        Context c = getApplicationContext() ;
        SharedPreferences sp = getSharedPreferences( PREF_NAME+widgetID, MODE_PRIVATE );

        // Set layout
        AppWidgetManager awm = AppWidgetManager.getInstance( c );
        RemoteViews rv = new RemoteViews( c.getPackageName(), LAYOUT_ID );

        awm.updateAppWidget( widgetID, rv );

        // start alarm manager running this particular widget
        Intent i = new Intent( c, MyWidgetReceiver.class );
        PendingIntent pi = PendingIntent.getBroadcast( c, 0, i, 0 );
        AlarmManager a = (AlarmManager) c.getSystemService( Context.ALARM_SERVICE );

        /** 
         * MY GUESS IS, THAT I'D HAVE TO ADD SOME KIND OF PendingIntent CALL HERE,
         * I TRIED COUPLE OF THINGS, BUT MOST OF THEM INTERFERED OR CANCELLED FOLLOWING 
         * AlarmManager REPEATING... 
         *
         * DELAY contains time left to closest full minute 
         */
        a.setRepeating( AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + DELAY, MINUTE, pi );     

        /// return widget ID
        Intent resultValue = new Intent();
        resultValue.putExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, widgetID );
        setResult( RESULT_OK, resultValue );

        finish();
    }

    // [...] More of some code...
}

したがって、上記のように、最初の1分から毎分alarmManagerを呼び出しており、遅延が経過した後はすべて正常に機能しますが、その前にウィジェットがしばらくフリーズします。これを防ぎたいのですが、Receiverにロジックを追加することなく、毎秒呼び出すことができるためです。ここに完全な元のコード:http://goo.gl/uOP9P

4

1 に答える 1

0

PendingIntent は、おそらく別の場所で記述されたコードを呼び出すことになります。アラームを設定した直後に同じコードを呼び出してみませんか?

于 2012-09-04T18:13:44.277 に答える