Безопасно ли запускать и работать из потока, отличного от 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]