Передача данных из потока в Activity - PullRequest
2 голосов
/ 12 июня 2010

Я хочу передать данные из Thread в Activity (который создал поток).

Так что я делаю, как описано в документации Android :

public class MyActivity extends Activity {

    [ . . . ]
    // Need handler for callbacks to the UI thread
    final Handler mHandler = new Handler();

    // Create runnable for posting
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            updateResultsInUi();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        [ . . . ]
    }

    protected void startLongRunningOperation() {

        // Fire off a thread to do some work that we shouldn't do directly in the UI thread
        Thread t = new Thread() {
            public void run() {
                mResults = doSomethingExpensive();
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
    }

    private void updateResultsInUi() {

        // Back in the UI thread -- update our UI elements based on the data in mResults
        [ . . . ]
    }
}

Здесь мне не хватает только одного - где и как следует определить mResults, поэтому яможет получить к нему доступ как из Activity, так и Thread, а также сможет изменять при необходимости?Если я определю его как final в MyActivity, я больше не смогу изменить его в Thread - как показано в примере ...

Спасибо!

1 Ответ

2 голосов
/ 12 июня 2010

Если вы определяете mResults в классе, а не в методе, вы можете изменить его в любом месте.Например:

protected Object mResults = null;

(Используйте защищенный, потому что быстрее )

...