我无法可靠地退出我的应用程序中的活动。当我按下设备上的“后退”按钮或者我从按钮单击呼叫finish()
时,活动显然是随机重新启动。onPreated()onPause()和onStop()之间的活动
示例活动:
[Activity(Label = "abc", ParentActivity = typeof(MainActivity))]
public class ImpressumActivity : Activity
{
private static int _instancecounter;
private int _thisinstance;
protected override void OnCreate(Bundle bundle)
{
_thisinstance = _instancecounter++;
Console.WriteLine("Creating instance {0}", _thisinstance);
base.OnCreate(bundle);
SetContentView(Resource.Layout.Impressum);
Console.WriteLine("Created instance {0}", _thisinstance);
}
public override void Finish()
{
Console.WriteLine("Finishing instance {0}", _thisinstance);
base.Finish();
Console.WriteLine("Finished instance {0}", _thisinstance);
}
protected override void OnStop()
{
Console.WriteLine("Stopping instance {0}", _thisinstance);
base.OnStop();
Console.WriteLine("Stopped instance {0}", _thisinstance);
}
protected override void OnPause()
{
Console.WriteLine("Pausing instance {0}", _thisinstance);
base.OnPause();
Console.WriteLine("Paused instance {0}", _thisinstance);
}
protected override void OnDestroy()
{
Console.WriteLine("Destroying instance {0}", _thisinstance);
base.OnDestroy();
Console.WriteLine("Destroyed instance {0}", _thisinstance);
}
}
现在,我在MainActivity开始十一时二十分五十秒通过impressumButton.Click += delegate { StartActivity(typeof(ImpressumActivity)); };
的activiy,然后我按后退按钮,在11时20分53秒。活动“保持”在屏幕上;实际上它得到了重新创建,我可以从输出中看到:
10-07 11:20:50.255 I/mono-stdout(6149): Creating instance 0
10-07 11:20:50.275 I/mono-stdout(6149): Created instance 0
10-07 11:20:50.275 D/Activity(6149): setTransGradationMode to true
10-07 11:20:53.535 I/mono-stdout(6149): Finishing instance 0
10-07 11:20:53.555 I/mono-stdout(6149): Finished instance 0
10-07 11:20:53.565 I/mono-stdout(6149): Pausing instance 0
10-07 11:20:53.585 I/mono-stdout(6149): Paused instance 0
10-07 11:20:53.605 I/mono-stdout(6149): Creating instance 1
10-07 11:20:53.625 I/mono-stdout(6149): Created instance 1
10-07 11:20:53.625 D/Activity(6149): setTransGradationMode to true
10-07 11:20:54.015 I/mono-stdout(6149): Stopping instance 0
10-07 11:20:54.015 I/mono-stdout(6149): Stopped instance 0
10-07 11:20:54.015 I/mono-stdout(6149): Destroying instance 0
10-07 11:20:54.015 I/mono-stdout(6149): Destroyed instance 0
我在其他活动中具有相同的行为。我试过NoHistory=true
,这有帮助,但打破了其他的事情(我想要在更复杂的活动中的通话记录),有和没有ParentActivity = ...
,但我卡住了。
更新:这是一个可以重现的MainActivity()行为: ():请注意,我描述的行为并不总是显示。当我第二次进入ImpressumActivity时,似乎出现主要是,或者更具体地说,我需要在第n次进入活动时按“返回”n(尽管它每次都被销毁!)
[Activity(Label = "@string/MainHL", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
}
protected override void OnResume()
{
base.OnResume();
var impressumButton = FindViewById<Button>(Resource.Id.impressum);
impressumButton.Click += delegate { StartActivity(typeof (ImpressumActivity)); };
}
}
在一个空白的Android项目中,并实现默认按钮的单击事件,它的工作原理与之相同。听起来像某种导航问题。 – 2014-10-07 10:56:49
任何想法可能导致导航问题? – baeuchle 2014-10-07 13:47:10
是所有的代码?你不重写OnBackPressed或类似的东西?没有看到所有的代码很难说。 – 2014-10-07 13:58:32