繁体   English   中英

执行在同一活动的先前实例中启动的AsyncTask剩余任务

[英]Perform remaining task of AsyncTask that was started in previous instance of the same activity

我正在使用AsyncTask在社交媒体上发布某些状态。

private class PostOnSocialMedia extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {

        pDialog.setTitle(R.string.posting_status_on_social_media);
        Log.d(TAG, "onPreExecuteCalled.");
    }

    @Override
    protected String doInBackground(String... params) {

        Log.d(TAG, "doInBackground.");

        currentActivity.this.twitter.tweet(params[0]);
        currentActivity.this.facebook.post(params[0]);
        currentActivity.this.googlePlus.share(params[0]);

        return null;
    }

    @Override
    protected void onPostExecute(String result) {

        if (pDialog.isShowing()) {
            pDialog.dismiss();
        }

        // Start next Activity when posted on all social media.
        Intent intent = new Intent(currentActivity.this,
                nextActivity.class);
        intent.putExtra("userMatches", userMatches);
        startActivity(intent);
        Log.d(TAG, "onPostExecute.");

    }
}

当用户未登录时,可以说Twitter我必须启动一个新的Intent来显示Twitter页面(以便用户可以登录)。 这将导致流返回到AsyncTask并调用onPostExecute()方法。 并开始新的活动。

但我不要这个。 我想要的是用户登录到Twitter ,然后将其返回到应用程序(当用户单击登录流程时,将返回到当前活动。但是,该活动是作为一个新活动创建的,而不是我从中发起对社交媒体的调用的活动发布)。 回到应用程序时,我调用Twitter类的方法来完成未完成的发布任务。 完成后,只有我想参加下一个活动。

那么,有没有办法处理这种情况?

编辑:
是否可以通过使用onSaveInstanceState(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState)解决此问题?

在调用asynctask之前,请确保您的用户在两个平台上均已登录,然后再调用asynctask,因为现在在这种情况下,用户可以进行多种组合,所以我的建议是首先确保用户在两个facbook上均已登录,tiwtter等等,然后调用此asynctask,这样就不必让asynctask等待

AsyncTask used for background Process.

So you have to check All the condition before calling asynctask and then used.

通常,AsyncTasks将在后台执行操作而不阻塞UI-Thread。 如果您想让主线程(= UI-Thread)等待AsyncTask,则可以不使用AsyncTask而直接执行。

如果您想等待,请尝试yourTask.get(); ,这应该使您的主线程等待Task的结果。 在此处查找有关get()的更多信息。

我通过使用一个static变量解决了我的问题,该变量在重新创建Activity之前就设置为true ,并且当Activity执行在onCreate我使用此变量来确定是否重新创建此Activity,如果是,则调用method来执行剩余的任务。

完成发布后,我从成功完成发布的Twitter类中调用一种活动方法,该方法称为在社交媒体Twitter进行发布的方法。

活动中的方法:

public static void postDone() {
    // Go to next activity
}

来自Twitter类的电话:

MyActivity.postDone();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM