2011-11-26 40 views
0

我有一个发射Activity A1,其具有启动Service S1开始按钮:结算的活动堆栈只需按一下

startButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       Log.i(TAG1, "Starting Update Service"); 
       startService(serviceIntentS1); 
      } 
     }); 

S1取决于一些条件开始Activity A2:

if (giveninteger>=2) 
     { 
      Intent intentA2= new Intent(this, A2.class); 
      // following line to avoid exception 
      intentA2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //to avoid exception 
      startActivity(intentA2); 

     } 

A2订阅S1,从A2用户可以借助S1查看定期更新的数据。 A2有以下代码停止S1服务:

public void onBackPressed() { 
     try { 
      Log.i(TAG2, "Killing Update Service"); 
      stopService(serviceIntentS1); 

       } catch (NullPointerException e) { 
      Log.i(TAG3, "Service was not running " + e.toString()); 
     } 
     finish(); 
     System.exit(0); 
     return; 
    } 

我的问题是,如果更新从A2运行10次,用户必须按后退按钮10次,退出Activity A2。这是A2的实例堆积在Activity堆栈中。我在S1从A2发布A2期间试过所有标志,但没有成功。无论更新运行多少次,我只想退出Activity A2即可。

任何建议将帮助。

+0

你所说的 “更新” 是什么意思?您是否在A2中使用BroadcastReceiver来捕获S1中的Intents或什么? –

+0

是的,我在A2中使用BroadcastReceiver并获得web服务 –

+0

那么,您是如何在活动堆栈中获得多个A2实例的?哪个组件开始全部?如果S1服务那么为什么它每次都是startActivity()而不是sendBroadcast()?如果有其他人,那么哪些? –

回答

1

你需要的是A2的SingleInstance,这样不论次数A2推出只有一个实例的保持,你需要按后退按钮只有一次。 在AndroidManifest文件中定义该属性。

<activity android:launchMode"singleInstance"/> 
+0

谢谢Rajdeep ...问题是,如果我使用它,活动A2的数据不会从服务S1更新。 –

+0

我解决了这个问题。感谢Rajdeep指导我清单文件。我不得不这样做清单文件的活动A2以下设置:机器人:clearTaskOnLaunch =“真” 机器人:stateNotNeeded =“真” 机器人:noHistory =“真” –