Обновление интерфейса на виджете останавливается через несколько часов без ошибок или исключений - PullRequest
0 голосов
/ 06 апреля 2011

Я создал виджет, который использует сервис с wakelock для обновления и анализа данных из xml и обновления пользовательского интерфейса виджета, чтобы элементы «вращались каждые несколько секунд» (стандартный виджет новостной ленты).

Проблема в том, что пользовательский интерфейс перестает обновляться через несколько часов, хотя данные продолжают обновляться.

Вот код, который я использую для обновления интерфейса:

mUpdateTimeTask = null;
mUpdateTimeTask = new Runnable() 
{
    public void run() 
    {
        if(which_item+1 < Widget_titles.length)
            which_item++;
        else
            which_item = 0;

        if(Widget_which_item_ed != null)
        {
           Widget_which_item_ed.putInt("WIDGET_WHICH_ITEM", which_item);
           Widget_which_item_ed.commit();   
        }
        else
        {
           Widget_which_item = context.getSharedPreferences("WIDGET_WHICH_ITEM", Context.MODE_WORLD_WRITEABLE); 
           Widget_which_item_ed = Widget_which_item.edit();

           Widget_which_item_ed.putInt("WIDGET_WHICH_ITEM", which_item);
           Widget_which_item_ed.commit();   
        }


        updateViews.setTextViewText(R.id.WidgetText, Widget_titles[which_item]); 
        updateViews.setTextViewText(R.id.WidgetPostTime, rightNow.get(Calendar.MONTH)+"/"+rightNow.get(Calendar.DATE)+"/"+rightNow.get(Calendar.YEAR));
        manager = AppWidgetManager.getInstance(context);
        manager.updateAppWidget(WidgetId, updateViews); 

        mHandler.removeCallbacks(mUpdateTimeTask);
        mHandler.postDelayed(this, widget_interval * 1000);
    }
};

mHandler.postDelayed(mUpdateTimeTask, widget_interval * 1000);
Log.i(TAG, "sliding update handler was configed");

Я действительно застрял и мог действительно использовать помощь.

Edit:

Мне удалось обойти эту проблему, реализовав BroadCastReciever для намерений включения / выключения экрана, как показано в руководстве здесь: http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ и, следовательно, время, необходимое для работы виджета, значительно меньше.

1 Ответ

1 голос
/ 26 июля 2011

Edit:

Мне удалось обойти эту проблему, реализовав BroadCastReciever для целей включения / выключения экрана, как показано в руководстве здесь: http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ и, следовательно, количество времени, необходимое для запуска виджета, намного меньше.

...