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

时间:2016-09-04 15:45:11

标签: java android widget

在创建自己的Widget类时,我们会覆盖一些基本的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()或开始时,它是否会执行任何预处理?

是否有规则/解释何时致电super()

2 个答案:

答案 0 :(得分:2)

AppWidgetProvider class只是一个BroadcastReceiver,它有一个专门的onReceive()方法,可以根据操作将传入的广播委托给其他方法。 onEnabled()类中的onDeleted()onDisabled()onUpdate()AppWidgetProvider方法都为空,因此无需调用super其中任何一种方法。

您根本不需要覆盖onReceive(),并且可以在其他提供的方法中处理窗口小部件的功能。如果您打算覆盖onReceive()方法并自行处理所有内容 - 也就是检查操作,并在每种情况下采取相应措施 - 那么您也可以省略super调用。如果你要“走到中途”,只是直接处理一些动作,那么你只需要在适当的时候调用super.onReceive(),因为它真正要做的就是立即调用其他方法之一。

答案 1 :(得分:1)

使用super关键字,您将调用特定方法的超类实现。

与超级调用相比,将代码放在哪里取决于您希望它在超类实现之前或之后运行的时间。

如果是onEnabled()onDisabled()onDeleted()以及onUpdate(),则没关系,它们是超类中的空方法,您甚至不需要打电话给他们。

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