android意图和回调

时间:2011-02-02 00:06:03

标签: android callback android-intent

我正在浏览android的教程,关于意图/活动交互的内容令我感到困惑。在Javascript中,只要有ajax调用,我们就定义了如何处理结果以及ajax调用,并且我们可以在整个应用程序生命周期中对不同的ajax调用使用不同的回调。在android中启动一个具有intent的活动并处理传递的返回结果是分离的,至少在教程中它是如何完成的,并且只有一个输入点来处理结果,因此很难在飞行处理中执行结果没有搞乱主要切入点。我可以很容易地想象一些复杂的逻辑可能会使主要入口点内的切换变成可怕的混乱。这是一个基本的Android体系结构的东西还是有另一种方法来处理实际的回调而不是单个入口点的switch语句?

3 个答案:

答案 0 :(得分:3)

确实,您只能在一个位置接收活动已完成的回复。如果你能为每个函数定义一个回调函数会很好,但这不是它的工作方式。

根据我的经验,你很少有一个活动很多不同的目的地,很难管理。通常,每个页面只会导致一个或两个您可能关心从中获取结果的页面。

您可以执行以下操作,以便为每种情况清晰地分离逻辑:

void onActivityResult(int requestCode, ....) {
  switch(requestCode) {
     case Activity1:
        onActivity1Result(...);
        break;
     case Activity2:
        onActivity2Result(...);
        break;
  }
}

答案 1 :(得分:1)

Intent和Activities旨在允许开发人员开发可重用,松散耦合的组件。

我理解,当您在创建的两个活动之间进行内部工作时,这些机制似乎会产生不必要的限制。限制性是平台开放性的一部分。用于启动您拥有的活动的相同机制可以启动由另一个开发人员或操作系统本身创建的活动。

话虽如此,在活动之间传递信息有很多选择。这真的取决于你想要完成的事情。我尝试从用户角度考虑活动。我将列出一些传递数据的机制,如果您想进一步描述您的应用程序或需求,我会尝试帮助您缩小选项范围:

  • Intent.putExtra
  • startActivityForResult(我假设你知道这个)
  • SharedPreferences
  • 服务
  • 的ContentProvider

答案 2 :(得分:1)

另请注意,没有自己的屏幕(如Ajax调用),您不必为后台进程启动新活动 - 您可以使用AsyncTask代替允许javascript样式回调。