可以设计android活动而不必覆盖所有类型的生命周期方法吗?

时间:2012-12-15 08:42:01

标签: android android-lifecycle

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

class MyAcitivity extends Activity {

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

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

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

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

我不喜欢这个,因为我发现我的逻辑代码被分成了我班级的所有地方。我在这个方法中做了一些操作,但我必须在另一个方法中处理结果。

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


更新

  

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

例如:

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上那样覆盖各种生命周期方法?

3 个答案:

答案 0 :(得分:2)

您只需覆盖您在“活动”中使用的方法。因此,如果您的活动简单显示已在XML中填充的帮助页面,则只需覆盖onCreate()并致电setContentView()

通常,如果您的覆盖方法如下:

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

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

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

修改

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

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

此外,许多生命周期方法(如onCreate()等)有助于设置应用的初始位(例如将其设为Context)。

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

答案 1 :(得分:1)

这只是一个通用的框架模式,框架不依赖于您,只是通知您,您的所有操作都是可选的框架。它被称为Inversion of Control

这与编程的直接样式正好相反,您可以在其中决定应用程序的所有内容,并为框架提供命令。

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

由于所有内容都是可选,您只需要填写您真正感兴趣的地方。空活动就可以了。

 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----
   }
 }

答案 2 :(得分:0)

您不一定需要覆盖激活的所有生命周期方法。它们都是出于特定目的

onCreate()

  

首次创建活动时调用。这是你应该做的   所有正常的静态设置:创建视图,将数据绑定到列表,   此方法还为您提供了包含的Bundle   活动的先前冻结状态,如果有的话。一直跟着   by onStart()。

onRestart()

  

在您的活动停止之后,在启动之前调用   再次。始终紧跟onStart()

onStart()

  

当活动对用户可见时调用。其次是   onResume(),如果活动到达前台,或onStop(),如果它   变得隐藏起来。

onResume()

  

当活动开始与用户交互时调用。在这   使用用户指出您的活动位于活动堆栈的顶部   输入到它。始终跟随onPause()。

<强> onPause ()

  

当活动进行时,被称为活动生命周期的一部分   进入背景,   但是还没有被杀死。 onResume()的对应部分。   当活动B在活动A前面启动时,将在A上调用此回调。   在A的onPause()返回之前不会创建B,所以一定不要   在这里做任何冗长的事情。

<强> onStop()

  

当您不再对用户可见时调用。你接下来会   接收onRestart(),onDestroy()或什么都没有,具体取决于   以后的用户活动。

     

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

onDestroy()

  

在您的活动被销毁之前收到的最后一个电话。这个   可能发生,因为活动正在结束(有人打电话给   在它上面完成(),或者因为系统正在暂时破坏它   节省空间的活动实例。你可以区分   这两个场景使用isFinishing()方法。