finish()方法在AsyncTask中不起作用

时间:2014-05-11 14:25:24

标签: java android android-intent android-asynctask android-activity

我知道finish()方法用于在开始新活动时完成当前活动。但是很可能在我的AsyncTask覆盖方法中,finish()方法不起作用。 好的,我当前的活动是 LoginActivity ,其中我实现了AsyncTask,并且在我的一个AsyncTask覆盖方法中,我开始 LoggedInActivity 。在 LoggedInActivity 中有许多片段。这不会导致我认为有任何问题。当我按BACK按钮时,我得到 LoginActivity 。我不希望这样。请看一下我的代码:

public class LoginActivity extends Activity implements OnClickListener {
    private void startLoggedInActivity()
    {
        Intent i = new Intent(this, LoggedInActivity.class);
        startActivity(i);
        finish();
    }
    private class FetchProfileTask extends AsyncTask<String, Integer, JSONObject>
    {
        protected JSONObject doInBackground(String... strings) {
            bla....bla....
        }
        protected void onPreExecute() {
            bla....bla....
        }
        protected void onPostExecute(JSONObject jsonObject) {
            try {
                startLoggedInActivity();
            } catch (Exception e) {
                Log.w("Exception", "FetchProfileTask - onPostExecute()");
            } finally {

            }
        }
    }
}

如果有人帮助我,我会很高兴.....

3 个答案:

答案 0 :(得分:1)

android:noHistory="true"添加到清单中的LoginActivity。

这样做是为了将活动标记为在转到其他活动后不添加到您的活动堆栈中。因此,当您按下后退按钮时,它将关闭您的应用程序而不是返回LoginActivity。使用此方法,您不再需要finish()调用。

<activity
    ...
    android:noHistory="true">

答案 1 :(得分:0)

后退按钮将更改为上一个活动。如果活动结束,Android将再次创建它(我不太确定)。所以我认为你可以重写后退按钮。

答案 2 :(得分:0)

Activity activity; // Instance Variable

Inside On Create:

activity = this;

private void startLoggedInActivity()
{
    Intent i = new Intent(this, LoggedInActivity.class);
    startActivity(i);
    activity.finish();
}