2012-09-03 34 views
0

我有一个退出的方法,这是否越来越Android游戏活动:理解为什么在这种情况下

public void quitFinalize(ServicedActivity actCtx) 
{ 
    for (ServicedActivity act : mRunningActivities) 
     launchActivity(actCtx, new Intent(mAppCtx, act.getClass()).setAction("--")); 
} 

检查发现mRunningActivities是OK.It包括在我的任务创建并没有被破坏,所有的活动。所有活动继承:

public class ServicedActivity extends FragmentActivity implements OnClickListener 
{ 
    ... 

    @Override 
    protected void onNewIntent(Intent intent) 
    { 
     super.onNewIntent(intent); 

     if (/*Intent.ACTION_SCREEN_OFF*/"--".equals(intent.getAction()))   // used for quitting the game 
     { 
      finish(); 
     } 
    } 

     ... 
} 

我已经注意到了,在设置2个活动,该机构工作正常。然而,对于3个活动,Android 4.0.3决定它应该启动(创建)Set中的一个活动的另一个实例(它似乎特别喜欢启动一个特定的活动,而不是任何活动)。和他们完成他们所有的(因此4个破坏活动,而不是原来3)

我敢肯定它不是我创建活动无意中 - 我所有的launchActivity逻辑是通过追加FLAG_ACTIVITY_REORDER_TO_FRONT标志的意图的方法过滤,所以我不能最终得到同一个Activity类的两个实例。它必须是重新创建它的操作系统。

也试过没有“机器人:launchMode =‘singleTop’”清单文件属性 - 它是像这样的应用程序的所有活动。一样。

这是怎么回事?上面的onNewIntent()方法按预期命中3次,但在中间,Android创建一个新的Activity然后立即终止它。

感谢


+0

可能相关:http://stackoverflow.com/questions/11703256/android-activity-intent-remains-after-shutdown – kellogs

回答

0

我已成功错误地解决这个问题,看来: 该文档提到,活动被销毁/各种事件,如配置更改重新创建。所以我想在所有可能的配置更改上从操作系统窃取控制权;现在的AndroidManifest.xml看起来

<activity android:name=".ui.MainMenu" android:launchMode="singleTop" android:screenOrientation="reverseLandscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale" /> 

... etc, same for all activities 

现在,docs还指出:

公共无效onConfigurationChanged(配置NEWCONFIG)由于:由系统调用 API等级1

当设备配置更改,而您的 活动正在运行。请注意,这才会被调用,如果你有 选择配置要处理与 configChanges在你的清单属性。如果任何配置更改 发生未选择由该属性报告,然后 而不是报告它,系统将停止并重新启动活动 (使它与新配置一起启动)。

我在我的活动中覆盖了这个方法,它根本不会被调用(比如,20次中的1次)。但问题不复存在,而且这种方法并没有真正被调用。所以我很困惑。也许这不是我的问题的底部,但..有点相关。

相关问题