繁体   English   中英

活动是在onPause()和onStop()之间的onCreated()

[英]Activity is onCreated() between onPause() and onStop()

我无法在我的应用中可靠地退出“活动”。 当我按下设备上的“后退”按钮或通过单击按钮调用finish() ,活动-显然是随机的-重新开始。

活动示例:

[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);
    }
}

现在,我通过impressumButton.Click += delegate { StartActivity(typeof(ImpressumActivity)); };开始活动。 impressumButton.Click += delegate { StartActivity(typeof(ImpressumActivity)); }; impressumButton.Click += delegate { StartActivity(typeof(ImpressumActivity)); }; 在MainActivity中的11:20:50上,然后在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 = ...情况下,都打破了其他事情(我确实希望在更复杂的Activity中获得通话记录),但是我陷入了困境。

更新:这是一个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)); };
    }
}

确实,这就是问题所在。 每次发生OnResume时,您都会关联单击事件,但不会释放它。 单击后将导致创建尽可能多的新活动实例。 在OnCreate中关联单击事件,您会好起来的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM