如何在不创建另一个线程的情况下将计时器放入AsyncTask中?

Mel*_*Mel 1 android android-asynctask

我有一个异步任务,用于连接到网站(Twitter).在某些情况下(例如,当Twitter发布更新失败时)我想等待10秒才再次尝试.因为我已经处于异步任务中,所以我不想为计时器启动另一个线程.

任何建议都会很棒:).代码如下......

        class SendTwitAsyncTask extends AsyncTask<String, Void, Void> {

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



        String tokenTwit = params[0];
        String tokenSecretTwit = params[1];
        String strMessageBody = params[2];

        AccessToken aToken = new AccessToken(tokenTwit, tokenSecretTwit);



        // initialize Twitter4J
        Twitter twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        twitter.setOAuthAccessToken(aToken);
        aToken=null;

        // create a tweet
        Date d = new Date(System.currentTimeMillis());
        String tweet = strMessageBody;

        try {

        status = twitter.updateStatus(tweet);


        // feedback for the user..
        showNotification("Twitter", TWIT_SUCCESS);  

    } catch (TwitterException te) {



        showNotification("Twitter ", TWIT_FAIL);
        te.printStackTrace();

                       //TO DO
                       //POSTING TWEET HAS FAILED.  TRY AGAIN IN 10 SECONDS


    }

        return null;
    }



} //end class SendTwitAsyncTask
Run Code Online (Sandbox Code Playgroud)

Ric*_*ich 8

有很多方法可以做到这一点.在你的情况下,我可能会使用Handler.postDelayed.

在与AsyncTask相同的范围内创建一个标记为final的Handler对象

final Handler handler = new Handler();
Run Code Online (Sandbox Code Playgroud)

然后从AsyncTask内部调用postDelayed以在必要时安排下一次运行:

    handler.postDelayed(new Runnable() {

        public void run() {
            new SmartTwitAsyncTask.execute(param);
        }
    }, 10000);
Run Code Online (Sandbox Code Playgroud)