只需在你的TokenCache實現你的load()方法返回捆綁的領域。只要確保你還沒有將TokenCache的引用傳遞給FB,直到該Bundle被一些init(bundle)方法初始化爲止,例如,
static class BundleRetrievalTask extends AsyncTask<String, Void, Bundle> {
@Override
protected Bundle doInBackground(String... strings) {
return someLongOperationThatFetchesBundle(strings[0]);
}
@Override
protected void onPostExecute(Bundle bundle) {
super.onPostExecute(bundle);
MyFacebookTokenCache tokenCache = MyFacebookTokenCache.init(bundle);
doSomethingWithCache(tokenCache);
}
}
static class MyFacebookTokenCache extends TokenCache {
private Bundle mBundle;
public MyFacebookTokenCache(Bundle bundle) {
mBundle = bundle;
}
public static MyFacebookTokenCache init(Bundle bundle) {
return new MyFacebookTokenCache(bundle);
}
@Override
public Bundle load() {
return mBundle;
}
@Override
public void save(Bundle bundle) {
//todo
}
@Override
public void clear() {
//todo
}
}
如果只有當它完成後返回的值,它不會真的是一個的AsyncTask,現在,不是嗎?你需要做的是重構它,以便它接受一個匿名類和一個接受返回值作爲參數的單一方法,或者一些其他類似的異步處理結果的機制。 – jrajav
是的,它是返回值的函數。它被設計成爲開發人員提供實現的抽象。問題是加載可能是一個長期的操作。 – Emerald214