我從這裏跟着Android Xamarin示例mvvmlight.net。 這兩個活動都擴展了ActivityBase。當我用適當的鍵調用_nav.NavigateTo時,其他活動打開,但每次都調用OnCreate,並且savedInstanceState始終爲空。 OnDestroy()和OnSaveInstanceState()永遠不會被調用。看來NavigateTo創建一個新的活動而不會破壞最後一個。它是否正確?爲什麼MVVM Light的NavigateTo創建新活動而不是重用它們?
在查看Android Activity生命週期時,應只調用一次OnCreate。我怎樣才能恢復其他活動,而不是每次重新創建它?
LoginActivity:
[Activity(Label = "Login", MainLauncher = true, Icon = null)]
public class LoginActivity : ActivityBase
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.LoginLayout);
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
var nav = new NavigationService();
nav.Configure(Constants.Keys.Main, typeof(MainActivity));
nav.Configure(Constants.Keys.Login, typeof(LoginActivity));
nav.Configure(Constants.Keys.Live, typeof(LiveActivity));
...
SimpleIoc.Default.Register<INavigationService>(() => nav);
LoginLayout.axml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="5dp">
... some buttons etc
</LinearLayout>
MainActivity:
public class MainActivity : ActivityBase
{
private INavigationService _nav;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
_nav = ServiceLocator.Current.GetInstance<INavigationService>();
}
private void Settings_Click(object sender, EventArgs e)
{
_nav.NavigateTo(Constants.Keys.Settings, null);
}
main.axml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/MainLayout">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main_content"
android:layout_below="@id/toolbar">
<Button
android:text="Live"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonLive"
android:layout_marginTop="20dp"/>
<Button
android:text="Alerts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonAlerts" />
<Button
android:text="Settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonSettings" />
</LinearLayout>
</RelativeLayout>
GC收集的舊活動也是如此嗎?就我所見,OnDestroy()從不會被調用。我應該如何清理它們? – eirik
我對MVVMLight並不十分熟悉......我希望它不會保留對活動的引用以便收集它們。然後,當本地GC收集它們根據內存壓力不是真正可預測的。 對於開發目的,您可以強制Android在您離開之後立即銷燬活動(它位於開發人員設置中,不要在Nexus 5X中保留活動) – GGirard