簡體   English   中英

手機鎖定后,appWidget會在一段時間后停止更新/工作

[英]appWidget stops updating/working after some time while phone is locked

我的小部件在一段時間后停止更新/工作。 我有一個簡單的小部件,每隔幾個小時顯示一次引號(現在設置為測試的秒數),對於定時它使用一個單獨的線程。

有什么不對? 為什么它會停止更新? 謝謝!

package com.example.napiige;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;

import android.content.Context;
import android.widget.Button;
import android.widget.RemoteViews;


public class MainActivity extends AppWidgetProvider {   

    String azIge;   
    static MainActivity[] ige = new MainActivity[3];


    @Override
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        final int N = appWidgetIds.length;
        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];

        String ig1 = context.getString(R.string.ige1);
        String ig2 = context.getString(R.string.ige2);
        String ig3 = context.getString(R.string.ige3);

        ige = new MainActivity[3];

        ige[0] = new MainActivity();
        ige[1] = new MainActivity();
        ige[2] = new MainActivity();

        ige[0].azIge = ig1;
        ige[1].azIge = ig2;
        ige[2].azIge = ig3;

        go(context, appWidgetManager, appWidgetIds);


        }
    }

    void go(final Context context, AppWidgetManager mgr, final int[] myWidgetId) {

        final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);        

        new Thread(new Runnable() {
            public void run() {

                int i = 0;
                while (i < 3) {

                    try {
                        Thread.sleep(3000);

                        views.setTextViewText(R.id.igePrint, ige[i].azIge);                             

                        AppWidgetManager awManager = AppWidgetManager.getInstance(context);
                        awManager.updateAppWidget(myWidgetId, views);                                           

                        } catch (InterruptedException e) {
                          e.printStackTrace();
                        }

                       i = i + 1;
                       if (i == 3) {
                       i = 0;
                    }
                } 
            }
        }).start(); 

   } 
}

如果你每隔幾個小時更新一次為什么不使用內置功能來更新AppWidgetProviderInfo中找到的app小部件,請使用android:updatePeriodMillis來設置更新時間(我相信你可以獲得的最短時間是30分鍾,但是它應該適合你)。 有關詳細信息,請訪問http://developer.android.com/guide/topics/appwidgets/index.html?utm_source=Android+Weekly&utm_campaign=b32a249c8f-Android_Weekly_46&utm_medium=email

我相信系統會在它感覺到它的時候殺死你的線程,它沒有義務讓它繼續運行。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="40dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure" 
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen|keyguard"
    android:initialKeyguardLayout="@layout/example_keyguard">
</appwidget-provider>

如果設備在需要更新時處於睡眠狀態,則設備將被喚醒以執行更新。即使您在android:updatePeriodMillis了少於30分鍾的測試目的android:updatePeriodMillis它也不會更新,因為它需要分鍾的時間為O update.we也可以手動調用reiever和通過檢查的動作更新30個miintes receiever和呼叫更新方法手動因為onUpdate()梅托德不會被機器人調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM