Android 在安卓系统中,你如何管理仅在应用程序处于活动状态时才传递的意图?

Android 在安卓系统中,你如何管理仅在应用程序处于活动状态时才传递的意图?,android,android-intent,android-asynctask,Android,Android Intent,Android Asynctask,我有一个活动X,它将通过AsyncTask获取的一些数据传递给活动Y。在从AsyncTask获取数据之前,有一个加载进度条,该进度条在AsyncTask的“doPostMethod”方法成功之前是可见的。现在,当执行此后台数据提取过程时,当用户按下手机的“后退”按钮时,应用程序将转到上一个活动,但发生的情况是,将调用activity X的doPostMethod,然后调用activity X的doPostMethod并将其发送到activity Y。有没有办法摆脱这个错误 doBackgroun

我有一个活动X,它将通过AsyncTask获取的一些数据传递给活动Y。在从AsyncTask获取数据之前,有一个加载进度条,该进度条在AsyncTask的“doPostMethod”方法成功之前是可见的。现在,当执行此后台数据提取过程时,当用户按下手机的“后退”按钮时,应用程序将转到上一个活动,但发生的情况是,将调用activity X的doPostMethod,然后调用activity X的doPostMethod并将其发送到activity Y。有没有办法摆脱这个错误

doBackground:从远程API调用获取结果 doPostMethod:

protected void onPostExecute(String result) {
    super.onPostExecute(result);
    loader.setVisibility(View.GONE);
    Intent preSummaryIntent = new Intent(PreSummary.this, SummaryList.class);
    preSummaryIntent.putExtra(SEARCH_RESULTS, result);
    startActivity(preSummaryIntent);
}

兄弟,用PostExecuteMethod()进行测试非常简单

检查我的代码。。。。你会很喜欢这张床的。我正在使用活动的一个组件来测试我是否还活着的活动

    protected void onPostExecute(String result) {
        if (imgageView != null && result != null) {
            startActivity(new Intent(MainMenuActivity.this, SubmitOrderActivity.class));
        }
   }
我希望它对你有用:)

编辑: 如果要在切换活动时停止异步

@Override
    protected void onPause() {
        if (download != null && download.getStatus() != AsyncTask.Status.FINISHED) {
            download.cancel(true);
        }
        super.onPause();
    }
对dailog使用setCancelable(false),以防止在进程未完成时取消对话框。您可以取消asyn任务以执行此操作,在活动中覆盖onBackPressed(),并初始化检查您的asyn任务是否正在运行(如果正在运行),然后通过调用“task.cancel(true)”取消asyncTask来取消它。执行如下操作

    @Override
 public void onBackPressed() {
    if(asyncTask != null){
        if(asyncTask.getStatus() == Status.RUNNING){
            asyncTask.cancel(true);
            asyncTask = null;
        }
     }
}

首先,你要检查你的应用程序是否运行正常。然后,只有您必须传递您的意图值

请尝试此代码以查找应用程序是否正在运行

ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfos.size(); i++){
   if(procInfos.get(i).processName.equals("com.me.checkprocess"))
   {
        Log.e("Result", "App is running - Doesn't need to reload");
        break;
   }
   else
   {
        Log.e("Result", "App is not running - Needs to reload);
   }
}

请显示代码和logcat日志。谢谢。编辑我的内容添加代码我真的不知道你想说什么。我承认我是安卓开发者中的noob。嘿,谢谢。但是当progressdialog运行时,我点击后退按钮,它会在后台运行asynctask时关闭progressdialog。它不会被取消!:当进度对话框可见时,点击“上一步”按钮,则“上一步”对话框被称为“非活动”,所以需要为进度对话框设置“可设置取消(错误)”。如果你现在在尝试时还有问题,请告诉我#更新:太棒了!用户3337034。虽然我无法回击,但至少在asynctask进行时,我会阻止打开下一个活动!因此,只有当获取的结果不为空时,这才有效,对吗?但问题是,dobackground一直轮询API请求,直到得到有效响应。一旦收到响应,它将启动下一个活动。只有当doBackGround完成其处理并轮询API重新请求时,才会调用OnPostExecute。但问题是,即使我按下“上一步”按钮,asynctask仍会继续运行。我同意它不会启动活动。但它仍然会继续使用互联网,不是吗?
Intent i = new Intent(LoginActivity.this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("USER", userData);
Intent i1 = new Intent(LoginActivity.this,Pacs_WakeupService.class);
i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i1.putExtra("USER", userData);                      
startActivity(i);