使用远程服务的数据刷新简单的Android Home小部件的最佳方式是什么?

使用远程服务的数据刷新简单的Android Home小部件的最佳方式是什么?,android,android-widget,android-service,timer-jobs,Android,Android Widget,Android Service,Timer Jobs,我正在尝试创建一个基于LinearLayout的小部件,每隔几分钟就会用股票代码和价格刷新它自己(可由用户在配置活动中配置) 以下是我遵循的步骤: 1) 在一个单独的过程中创建远程服务(我已经测试了该服务,效果很好) 2) 按照下面的代码片段实现小部件 我的问题是,应该如何设计一个小部件,从来自远程服务的数据中刷新它的sell (1) 使用我下面的方法-每隔几分钟从TimerTask启动/绑定到远程服务,并更新小部件(尝试测试它或每5秒仅用于测试目的…请耐心等待我…顺便说一句,不工作) (2

我正在尝试创建一个基于LinearLayout的小部件,每隔几分钟就会用股票代码和价格刷新它自己(可由用户在配置活动中配置)

以下是我遵循的步骤:

1) 在一个单独的过程中创建远程服务(我已经测试了该服务,效果很好) 2) 按照下面的代码片段实现小部件

我的问题是,应该如何设计一个小部件,从来自远程服务的数据中刷新它的sell

(1) 使用我下面的方法-每隔几分钟从TimerTask启动/绑定到远程服务,并更新小部件(尝试测试它或每5秒仅用于测试目的…请耐心等待我…顺便说一句,不工作)

(2) 我是否应该简单地在我的应用程序小部件中声明自定义广播过滤器(因为它本质上是一个广播接收器),并覆盖onReceive,并从远程服务接收的extras from intent发布数据(我的远程服务可以每0秒广播一次自定义intent)

最好的选择是什么?我试图搜索一个示例场景,其中有人遇到与我类似的问题,但找不到太多信息

下面是我的小部件的代码-
//作者-Anand M
公共类TestWidget扩展了AppWidgetProvider{
@凌驾
公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){
对于(int i=0;i

其他信息:

(1) 我已经声明了widget_provider布局, (2) 小部件\u提供程序\u信息布局

(3) 并将小部件声明为接收者(根据文档:URL:http://developer.android.com/guide/topics/appwidgets )

  • 在小部件类中实现LocalService
  • 在小部件类中实现TimerTask
  • 从TimerTask的run()方法启动LocalService
  • LocalService将通过从远程服务获取数据来刷新小部件视图
  • // Author - Anand M
    public class TestWidget extends AppWidgetProvider {
    
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
            for (int i = 0; i < N; i++) {
                // We have only one widget on Home Screen
                int appWidgetId = appWidgetIds[i];
                timer.scheduleAtFixedRate(new MyRefreshTimer(context, appWidgetManager, appWidgetId), 3000, 5000);
            }
        }
    
        @Override
        public void onDeleted(Context context, int[] appWidgetIds) {
            Log.d(LOGTAG, "onDeleted");
    
            timer.cancel();
            timer = null;
        }
    
        @Override
        public void onEnabled(Context context) {
            Log.d(LOGTAG, "onEnabled");
    
        }
    
        @Override
        public void onDisabled(Context context) {
            Log.d(LOGTAG, "onDisabled");
        }
    
        private class MyRefreshTimer extends TimerTask {
            // Remote Service Interface declaration
            // Connection to Remote Service
    
            public MyRefreshTimer() {
    
                // Initialize it here
                // Start and Bind to Remote Service
    
    
            }
    
            public void run() {
    
                // get data from Remote Service 
                // if the data received is not null then Push it to this widget 
                ComponentName thisWidget = new ComponentName(_ctx, TestWidget.class);
                AppWidgetManager manager = AppWidgetManager.getInstance(_ctx);
                manager.updateAppWidget(thisWidget, remoteViews);
    
                Intent myWidgetIntent = new Intent(_ctx, TestWidget.class);
                myWidgetIntent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
                _ctx.sendBroadcast(myWidgetIntent);
    
            }
    
        }
    }