我正在嘗試爲Android應用程序同步兩個代碼塊。濫用同步?
第一個塊使用AsyncFacebookRunner爲用戶的興趣提出請求(如果有的話)。
如果發現興趣,則該用戶的成員變量將使用Facebook JSON響應中的興趣填充。
第二個代碼塊通過查看該成員變量來檢查用戶實際上是否有興趣。如果有興趣,則會執行幾個額外的代碼行。
synchronized(this)
{
if ((friend.getmActivities().length() == 0) && (friend.getmInterests().length() == 0))
friend.requestInterests(mFacebook); // Get that friend's Facebook activities and interests.
}
synchronized(this)
{
if ((friend.getmActivities().length() == 0) && (friend.getmInterests().length() == 0))
{
final AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Sorry...");
alertDialog.setMessage("Your friend isn't sharing their interests.");
alertDialog.setButton("Go Back", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
}
我希望第二個模塊等到friend.requestInterests()完成後再執行。
編輯:我結束了重構我的代碼,以利用亞軍的onComplete方法。這一切都是在我修改我的程序結構並不得不改變一切的時候出現的。感謝所有的幫助。
AysncFacebookRunner *應該*支持回調。使用這些(如果它不,...找到一個更好的圖書館?:-)。然後,這只是對「完成」事件作出反應的問題,非常類似於正常的按鈕單擊或不按鈕。根據確切的細節(例如,線程是什麼線程),可能仍然需要「同步」。但是,這是一個糟糕的錯誤使用,可能甚至不能做到所期望的。考慮其他「基元」,例如互斥或信號量用於「非範圍」資源控制。 (另請參閱期貨等) – 2011-05-18 22:44:13
這是事實。不過,我寧願在不使用回調的情況下執行此操作。我將不得不相當大地修改我的代碼的結構以利用onComplete。 – SemperFly 2011-05-18 22:50:56