调用finish()会导致startActivity()AndroidRuntimeException

时间:2013-03-14 00:06:01

标签: android android-intent android-activity

有时,当我使用finish()方法关闭特定活动时,我收到错误:

AndroidRuntimeException “Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag”

这似乎只有在我启动后快速关闭活动(通过单击后退按钮)时才会发生。然而,这并不是一直发生的。简而言之,这是活动层次结构:

MainActivity-> ListViewActivity-> ItemViewActivity

从ItemView返回时(定期)发生错误。

为了描述完整的链,我在MainActivity中有一个按钮,按下它时会调用listCLick

  public void listClick(View view) {
    Intent myIntent = new Intent(this, ListViewActivity.class);
    startActivityForResult(myIntent, 0);        
  }

然后,当单击列表视图中的项目时,它会调用覆盖的onItemClick方法

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Intent itemintent = new Intent(this, ItemViewActivity.class);
    startActivity(itemintent);
}

我在ItemViewActivity中使用TextView(带有图像和文本),用户可以点击该TextView返回上一个活动。

    TextView tempView;
    // close this activity if someone clicks the waypoint's icon.
    tempView = (TextView) findViewById(R.id.textview);
    tempView.setText("Back");
    tempView.setOnClickListener(backListener);

其中backListener定义为:

private OnClickListener backListener = new View.OnClickListener() {
    public void onClick(View v) {
        finish();
    }
};

所以当我自己实际调用startActivity()时,我从未得到错误,只有当我从一个活动返回时。这是堆栈跟踪:

Uncaught handler: thread main exiting due to uncaught exception
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ApplicationContext.startActivity(ApplicationContext.java:550)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:248)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:205)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:304)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

将覆盖方法onDestroy();添加到您的活动中,该活动遇到上述问题并在其中调用super.onDestroy();方法,在这种情况下,当您按下后退按钮进入您刚开始的活动时,它将完成维持其生命周期,只需执行以下操作:

@Override 
public void onDestroy(){
super.onDestroy();
}

希望这个帮助