Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主页小部件-通过onUpdate多次注册UI事件处理程序是否效率低下_Android - Fatal编程技术网

Android 主页小部件-通过onUpdate多次注册UI事件处理程序是否效率低下

Android 主页小部件-通过onUpdate多次注册UI事件处理程序是否效率低下,android,Android,到目前为止,我看到的所有AppWidgetProvider代码示例都将UI事件处理程序寄存器代码放在onUpdate中 然而,这不是有些多么低效吗?正如我所想,UI事件处理程序注册只需要完成一次 onUpdate将始终重复触发 有没有更有效的方法 public class MyWidgetProvider extends AppWidgetProvider { private static final String ACTION_CLICK = "ACTION_CLICK"; @Ov

到目前为止,我看到的所有
AppWidgetProvider
代码示例都将UI事件处理程序寄存器代码放在
onUpdate

然而,这不是有些多么低效吗?正如我所想,UI事件处理程序注册只需要完成一次

onUpdate
将始终重复触发

有没有更有效的方法

public class MyWidgetProvider extends AppWidgetProvider {

  private static final String ACTION_CLICK = "ACTION_CLICK";

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

      ...

      // Register an onClickListener
      Intent intent = new Intent(context, MyWidgetProvider.class);

      intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
      intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

      PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
          0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
      remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
      appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
  }
}

让我这样说吧

远程视图不是真实视图,而是用于创建真实视图的一组规则。然后调用
updateAppWidget()
,然后将这组规则发送到Android,Android通过应用这些规则创建新视图
onclickpendingent
就是这些规则之一。如果它在那里,那么它就会被应用,你就有了一个监听器集

如果您创建了一个新的
remoteview
实例,那么您也必须为此实例提供一个
onclickpendingent
。如果您不这样做,那么就不会注册侦听器,也不会得到回调。在这方面,您不会在同一个实例中设置侦听器两次或多次,因为您也总是重新创建
remoteview
,这是最佳的

如果远程视图没有改变,Android可能会通过重用现有视图来应用额外的优化。但这是你无法控制的