2015-06-09 158 views
0

我記得只有UI線程可以修改Activity的View,no-UI線程不能修改視圖。 因此,您將在代碼中找到的方法「replace()」是否是線程安全的? ?如果代碼是正確的,爲什麼這種方法可以做到這一點(謝謝)Android FragmentTransaction.replace()是否是線程安全的?

這是代碼:

public class SelectBookActivity extends Activity implements BookListFragment.Callbacks { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // inflate a ListFragment and a container setContentView(R.layout.activity_book_twopane); } // the method in the interface @Override public void onItemSelected(Integer id) { Bundle arguments = new Bundle(); arguments.putInt(BookDetailFragment.ITEM_ID, id); BookDetailFragment fragment = new BookDetailFragment(); fragment.setArguments(arguments); getFragmentManager().beginTransaction() .*replace*(R.id.book_detail_container, fragment) .commit(); } }

+0

您目前沒有從線程調用該方法。在UI線程上調用onItemSelected。 – DeeV

+0

@DeeV onItemSelected()是由ListFragment對象調用的,這個回調函數也在UI線程中? – Michael

+0

是的。這樣的UI操作全部在主線程上執行。 – DeeV

回答

1

方法commit() 時間表提交本次交易的。提交不會立即發生;它將被安排在主線程上工作,在下次線程準備就緒時完成。