0

当我在 android 上编写我的活动时,我必须重写很多“生命周期”方法,例如onCreateonActivityResult

class MyAcitivity extends Activity {

    @Override
    public void onCreate(...) {}

    @Override
    public void onStart(...) {}

    @Override
    public void onActivityResult(...) {}

    @Overide
    public void onBackPressed(...) {}
}

我不喜欢这样,因为我发现我的逻辑代码被拆分到课堂上的任何地方。我在这种方法中做了一些操作,但我必须在另一种方法中处理结果。

像这样设计 Activity 是唯一的方法吗?有没有其他解决方案可以让我在不覆盖超类方法的情况下做同样的事情?


更新

我在这种方法中做了一些操作,但我必须在另一种方法中处理结果。

例如:

public void onCreate(...) {
    startActivityForResult(new Intent(this, AnotherAcitity.class), INTENT_ANOTHER);
}

public void onActivityResult(...) {
    if(requestCode == INTENT_ANOTHER)  {
        // do something
    }
}

再次更新

我知道如何使用这些生命周期方法,我在想的是“设计”。是否有任何不同的方式来设计android(理论上)而不用“覆盖生命周期方法”来编写活动。手机上的ios和win8是和android一样的设计吗?如果我开发一个 ios 或 win8 应用程序,我是否必须像在 android 上那样覆盖各种生命周期方法?

4

3 回答 3

2

您只需要覆盖您在 Activity 中使用的方法。因此,如果您的活动简单显示了一个已在 XML 中填充的帮助页面,您只需覆盖onCreate()并调用setContentView().

一般来说,如果你的重写方法是这样的:

public void myOverridenMethod() {
    super.myOverridenMethod();
}

也就是说,它只包含一个超级调用,你不需要覆盖它。

在您提供的示例中,您必须覆盖适当的生命周期方法,因为这些方法的调用超出了您的控制范围,除非您愿意为您的设备开发自定义 ROM。

编辑

Android 生命周期方法由系统在应用程序生命周期中的特定预定义点调用。

您不能以不同的方式设计 Activity,就好像您这样做 Android 不知道哪种方法可以做什么。但是,它确切地知道何时在 Android 生命周期中调用哪个方法。通过使用您自己的方法而不是这些方法,您将拥有一个 Android 无法与之交互的应用程序。

此外,许多生命周期方法(例如onCreate()等)有助于设置应用程序的初始部分(例如获取它Context)。

iOS、Windows Phone 和 BlackBerry 具有相似的生命周期方法,但它们并不总是具有完全相同的 Android 等效方法,因为它们都是不同的平台,并且处理它们的应用程序的方式也不同。

于 2012-12-15T08:44:42.870 回答
1

这只是一个通用的框架模式,框架不依赖于你,只是通知你,你的所有动作对于框架都是可选的。它被称为控制反转

这与直接的编程风格相反,在这种风格中,您决定应用程序的所有内容,并向框架发出命令。

Google 开发人员设计了 Activity 类,Android 只能通过它们工作。Android 会随时调用这些方法。Android 不关心你在这些方法中做了什么,它只关心通知你生命周期事件。

由于一切都是可选的,你只需要填写你真正感兴趣的地方。一个空的 Activity 运行得很好。

 public class MyActivity extends Activity { }

如果需要做任何额外的事情,只需在正确的位置添加代码

 public class MyActivity extends Activity { 
   @Override
   public void onCreate(...) {
      //---whatever you want to do in this stage of life cycle----
   }
 }
于 2012-12-15T09:00:58.833 回答
0

您不一定需要覆盖活动的所有生命周期方法。他们都是为了一个特定的目的

onCreate()

在第一次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供了一个包含活动先前冻结状态的 Bundle(如果有的话)。始终跟在 onStart() 之后。

onRestart()

在您的活动停止后、再次开始之前调用。始终跟随 onStart()

onStart()

当活动对用户可见时调用。如果活动进入前台,则为 onResume(),如果活动被隐藏,则为 onStop()。

onResume()

当 Activity 开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到它。始终跟随 onPause()。

暂停()

当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。onResume() 的对应项。当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,因此请确保此处不要做任何冗长的事情。

onStop()

当您不再对用户可见时调用。接下来您将收到 onRestart()、onDestroy() 或什么也没有,这取决于以后的用户活动。

请注意,在调用 onPause() 方法后系统没有足够内存来保持活动进程运行的低内存情况下,可能永远不会调用此方法。

onDestroy()

在您的活动被销毁之前您收到的最后一个电话。这可能是因为 Activity 正在完成(有人在其上调用了 finish(),或者因为系统正在临时销毁该 Activity 实例以节省空间。您可以使用 isFinishing() 方法区分这两种情况。

于 2012-12-15T08:54:03.550 回答