Безопасно ли запускать и работать из потока, отличного от ui?
Предположим, что моя активность ui-thread в какой-то момент порождает отдельный поток. Безопасно ли для этого нового потока отменить намерение для запуска нового действия?
Спасибо
Ответы
Ответ 1
Я мог ошибаться, но я думаю, что startActivity()
внутренне выполняется в потоке пользовательского интерфейса. Поэтому да, это должно быть безопасно.
Если вы хотите быть на 100% уверенным, вызовите startActivity()
в своей деятельности runOnUiThread()
как Runnable
.
Ответ 2
Первые несколько строк startActivityForResult()
(используемые всеми вариантами startActivity()
) показывают, что это нормально:
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode, options);
Ответ 3
Я сделал эксперимент:
- начал работу из потока non ui и в onCreate() установил цикл от 1 до 100, где я печатал имя потока Thread.currentThread()
- поместить тот же цикл сразу после запуска активности в ничейной нити
Вывод одновременно показывал им имена Thread [AsyncTask # 1,5, main] и Thread [main, 5, main]