2015-06-09 163 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() 时间表提交本次交易的。提交不会立即发生;它将被安排在主线程上工作,在下次线程准备就绪时完成。