首先,我将解释我处于我的应用程序中的情况,然后讨论我的主要问题。首先,我想知道我处理活动的方式是否是处理活动的正确方式,因为我认为这可能不会导致我的问题。Android:处理活动的正确方法
目前我有3个活动设置。 Main.class,Login.class和Display.class。主要活动根本没有任何关联的UI,它启动其他活动。因此,启动应用程序时启动的第一个活动是Main活动,它会从SharedPreferences存储中读取并读取用户是否登录。如果它们未登录,它将打开Login。类,如果他们已经登录,它会打开Display.class(两者都有与之关联的UI)。它使用startActivityForResult()。
由于我决定去处理活动,我需要重写Login.class和Display.class上的后退按钮:否则,它将返回到Main.class,并重新运行启动活动序列,它将重新启动刚刚运行的活动(因此后退按钮无用)。所以,我覆盖了后退按钮发回一个-1的整数,然后完成()当前活动。我重写了Main.class的onActivityResult(int,int,Intent),如果它接收到-1,它也会完成(),而不是试图重新启动活动。
现在,这一切都为我的需要而工作,尽管我有一种感觉,这是完全错误的方式来处理活动,并且这会给我以后的问题带来麻烦。
在我的应用程序中,我决定将一个应用程序窗口小部件和一个通知放入,这两个窗口都会在点击时打开应用程序(通过启动Main.class的意图)。我已经完成了所有工作,以便它能这样做,尽管看起来开始一个新的活动会导致问题。
会发生什么基本上是,如果应用程序已经在运行,并且有人拉下通知并点击它,它会打开同一应用程序的新活动。这是有问题的,尤其是我处理后退按钮的方式:当您打开一个新按钮并按下后退按钮时,它将关闭新按钮(如预期的那样),但会将您带回旧的按钮。然后您可以再次按下后退按钮并退出,但显然我不想发布需要按下后退按钮两次的应用程序。解决这个问题的最好方法是什么?如果这是问题的主要部分,我很乐意完全改变我处理活动的方式。
谢谢, 乔希。
+1有关重新思考方法的良好讨论。我试图通过在活动之上有一个Application类来解决这个问题。我在下面发布了一个例子。 – Aleadam 2011-04-20 05:00:20