簡體   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