0

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

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 { 

      } 
     } 
    } 
} 

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

+0

为什么不尝试YOUT开始loggenInActivity – elmorabea

+0

@dcharms整理后在onPostExecute()你的活动如果我使用'机器人:noHistory = “真”'这将适用于从** LoginActivity **开始的所有活动。我不想那样。我想完成一些特定活动的** LoginActivity **。 –

+0

@MahmoudElmorabea请看'startLoggedInActivity()'方法。我用'finish()'完成当前活动。但不知道为什么它不起作用。 –

回答

1

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

这是做什么的标记活动不会被添加到您的活动堆栈后去其他活动。所以当你按下后退按钮时,它会关闭你的应用程序,而不是回到LoginActivity。采用这种方法,您不再需要拨打finish()

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

如果我使用'android:noHistory =“true”'这将适用于从** LoginActivity **开始的所有活动。我不想那样。我想完成一些特定活动的** LoginActivity **。 –

+0

在什么情况下你想回到LoginActivity?对我而言,只有注销才有意义,然后您可以使用'startActivity'将LoginActivity备份。 – dharms

+0

否否否。在我的应用程序中,我需要从** LoginActivity **开始各种活动,并且只需在启动时完成** LoginActivity ** ** LoggedInActivity **。 –

0

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

0
Activity activity; // Instance Variable 

内上创建:

activity = this; 

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

你的代码和我的代码有什么不同? –

+0

区别在于activity.finish()访问父上下文活动并执行此方法,否则您需要使用runOnUI()线程完成活动,才能在正确的线程中完成活动。 Regards –

+0

@JSanchez'onPostExecute' * *在主UI线程上运行。这段代码没有区别。 – dharms