Nexus 5 でプログラムを実行すると AsyncTask は一回しか呼ばれなかったのですが、今度は Xperia でプログラムを実行すると AsyncTask が二回呼ばれてしまいました。端末が違えば挙動がおかしくなるというバグが AsyncTask にはあったりするのでしょうか?以下にソースコードを記します。ログを取ってみると、 PostTwitter クラスの doInBackground() と、 TwitterOAuth クラスのgetAccessToken()doInBackground()がそれぞれ二回呼ばれていました。つまり Twitter への投稿が二回されてしまいます。これは AsyncTask の使い方が何か間違っているのでしょうか?すみませんが、宜しくお願いします。

PostTwitter クラス:

public class PostTwitter extends AsyncTask<String, Void, Boolean> {
    private Activity mActivity;
    private Twitter mTwitter;

    public PostTwitter(Activity activity) {
        mActivity = activity;
        mTwitter = TwitterUtils.getTwitterInstance(activity.getApplicationContext());
    }

    public void shareTwitter() {
        if (TwitterUtils.hasAccessToken(mActivity.getApplicationContext())) {
            share(mActivity);
        } else {
            TwitterOAuth twitterOAuth = new TwitterOAuth(mActivity);
            twitterOAuth.startAuthorize();
        }
    }

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

        try {
            File file = new File(Environment.getExternalStorageDirectory().getPath() + "/image.png");
            StatusUpdate status = new StatusUpdate(params[0]); {
                status.setMedia(file);
            }
            mTwitter.updateStatus(status);
            return true;
        } catch (TwitterException e) {
            e.printStackTrace();
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            showToast("ツイートが完了しました!");
        } else {
            showToast("ツイートに失敗しました。。。");
        }
    }

    private void showToast(String text) {
        Toast.makeText(mActivity, text, Toast.LENGTH_SHORT).show();
    }

    public void share(Activity activity) {
        PostTwitter task = new PostTwitter(activity);
        task.execute(TwitterContents.getInstance().getmMessage());
    }
}

TwitterOAuth クラス:

public class TwitterOAuth {
    private Activity mActivity;
    private String mCallbackURL;
    private Twitter mTwitter;
    private RequestToken mRequestToken;
    private String mOAuthURL;
    private String mOAuthVerifier;

    public TwitterOAuth(Activity activity) {
        mActivity = activity;
        mCallbackURL = activity.getString(R.string.twitter_callback_url);
        mTwitter = TwitterUtils.getTwitterInstance(activity);
    }

    public void startAuthorize() {
        AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                try {
                    mRequestToken = mTwitter.getOAuthRequestToken(mCallbackURL);
                    mOAuthURL = mRequestToken.getAuthorizationURL();
                    return mOAuthURL;
                } catch (TwitterException e) {
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String url) {
                if (url != null) {
                    showTwitterDialog();
                } else {
                    // 失敗。。。
                }
            }
        };
        task.execute();
    }

    private void getAccessToken() {
        AsyncTask<String, Void, AccessToken> task = new AsyncTask<String, Void, AccessToken>() {
            @Override
            protected AccessToken doInBackground(String... params) {
                try {
                    return mTwitter.getOAuthAccessToken(mRequestToken, params[0]);
                } catch (TwitterException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(AccessToken accessToken) {
                TwitterUtils.storeAccessToken(mActivity, accessToken);
                PostTwitter postTwitter = new PostTwitter(mActivity);
                postTwitter.share(mActivity);
            }
        };
        task.execute(mOAuthVerifier);
    }
}