android widget简单开发三之实时刷新widget

接上两篇,如果想要实时更新widget的话,可以通过service去操作。

一、先新建一个AppwidgetService服务类继承Service

public class AppWidgetService extends Service {
    private List strLists = new ArrayList<>();
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private Timer timer;
    int i = 0;
    private TimerTask task = new TimerTask(){
        @Override
        public void run() {
            AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());//获得appwidget管理实例,用于管理appwidget以便进行更新操作
            ComponentName componentName = new ComponentName(getApplicationContext(),AppWidget.class);//获得所有本程序创建的appwidget
            RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.widget_layout);//获取远程视图
            remoteViews.setTextViewText(R.id.txt,strLists.get(i));
            manager.updateAppWidget(componentName,remoteViews);
            //每执行一次 i加1;
            i++;
            //如果i>6即,strLists最后一个数据,则归零
            if (i>6){
                i = 0;
            }
        }
    };
    @Override
    public void onCreate() {
        super.onCreate();
        initData();
        timer = new Timer();
        timer.schedule(task,0,1000);//开始任务
    }
    private void initData(){
        strLists.add("我");
        strLists.add("我们");
        strLists.add("我们去");
        strLists.add("我们去哪");
        strLists.add("我们去哪里");
        strLists.add("我们去哪里啊");
        strLists.add("我们去哪里啊?");
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        //关闭定时器
        timer.cancel();
    }
}

二、在清单文件中注册AppwidgetService

  

、在Appwidget广播接收器中

onEnabled启动服务即第一个widget创建的时候执行

onDisabled停止服务即最后一个widget删除的时候执行

你可能感兴趣的:(android)