活动生命周期 - 一些奇怪的行为。不能复制

时间:2011-04-13 14:02:24

标签: android

这可能是一个广泛的问题,但我会尽力解释。如果出现任何问题,我也会给出代码片段 - 请告诉我。

我不能重复这个问题,但它表面如下:

一个。有时我会登录 - 我点击退出并看到我的活动刷新。这可能会发生很多次。我期望在点击退出时关闭活动。

湾有时我正在使用我的活动(已经登录)并从图标开始。我点击后退,它不会进入“桌面”并再次进入活动。这可能发生1-3次。我希望这是回击桌面时回到桌面的主要活动。

℃。我在Yahoo邮件应用程序上发现了类似的问题,所以我不确定这是我的Nexus S上的bug还是2.3.1问题?

我有: 1.主要活动 2.登录对话框,即自定义对话框。

这是我活动的代码:

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //If not authorized yet then show sign in dialog
        if (!PreferencesManager.getIsUserAuthenticated(getApplicationContext()))
        {
            showDialog(1);
        }

        Button signOutButton = (Button) findViewById(R.id.SignOutButton);
        signOutButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                PreferencesManager.setIsUserAuthenticated(false, getApplicationContext());
                **MainActivity.this.finish();**
            }
        });


    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();

    }

    @Override
    protected void onPause()
    {
        super.onPause();
    }

    protected Dialog onCreateDialog(int id)
    {
        LoginDialog dialog = new LoginDialog(this);

        dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
        {
            public void onDismiss(DialogInterface dialog)
            {
                if (!PreferencesManager.getIsUserAuthenticated(getApplicationContext()))
                {
                    **MainActivity.this.finish();**
                }
            }
        });

        return dialog;
    }

在对话框类中 - 如果Login成功,我会有常规内容和“this.dismiss”。

2 个答案:

答案 0 :(得分:1)

我不确定这是关闭活动的正确方法,但您可以做的一件事是将您的清单中的launchMode更改为singleTop,以防止启动该活动的各种实例。 / p>

希望它有所帮助, JQCorreia

答案 1 :(得分:0)

您的活动以某种方式多次创建。如果它是桌面或应用程序抽屉的快捷方式,或者是在家中,或者其他一些快捷方式,这可以用于它的运行方式。

您可能希望在http://developer.android.com/guide/topics/manifest/activity-element.html

查看launchMode