Android: Widget 中 super() 调用的位置

Android: Locations of super() calls in Widgets

在创建自己的小部件 class 时,我们将覆盖一些基本的 AppWidgetProvider 方法:

@Override
public void onEnabled(final Context context)
{
    // TODO Auto-generated method stub
    super.onEnabled(context);
}
@Override
public void onDeleted(final Context context, final int[] appWidgetIds)
{
    // TODO Auto-generated method stub
    super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(final Context context)
{
    // TODO Auto-generated method stub
    super.onDisabled(context);
}
@Override
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds)
{
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(final Context context, final Intent intent)
{
    // TODO Auto-generated method stub
    super.onReceive(context, intent);
}

当我们在结束或开始时调用super()时,它是否执行任何预处理?

是否有 rule/explanation 何时调用 super()

AppWidgetProvider class 只是一个 BroadcastReceiver,带有专门的 onReceive() 方法,可根据操作将传入广播委托给其他方法。 onEnabled()onDeleted()onDisabled()onUpdate()方法在AppWidgetProviderclass中都是空的,所以不需要调用super 方法中的任何一个。

您根本不需要重写 onReceive(),只需在提供的其他方法中处理您的小部件的功能即可。如果您打算覆盖 onReceive() 方法并自己处理所有事情——即检查操作,并在每种情况下采取相应的行动——那么您也可以省略那里的 super 调用。如果您要 "go halfway",并且只是直接处理一些操作,那么您只需要在适当的时候调用 super.onReceive(),因为它真正要做的是立即调用其他方法之一。

通过使用 super 关键字,您将调用特定方法的超级class 实现。

与 super 调用相比,您应该将代码放置在何处取决于您希望它何时 运行,在 superclass 实施之前或之后。

onEnabled()onDisabled()onDeleted()onUpdate()的情况下,没关系,它们是superclass中的空方法, 你甚至不需要打电话给他们。

onReceive() 基本上是一个调度程序,它根据收到的操作调用 class 的所有其他方法。如果您想自己做,请不要调用它。如果您不这样做,请根据您的需要在适合调用其他方法时调用它。