【问题标题】:Pass data from thread into Activity将数据从线程传递到 Activity
【发布时间】:2010-06-12 17:38:04
【问题描述】:

我想将数据从Thread 传回Activity(创建线程)。

所以我按照Android documentation 中的描述进行操作:

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 以便我可以从 ActivityThread 访问它,并且还可以根据需要进行修改?如果我在MyActivity 中将其定义为final,我将无法再在Thread 中更改它 - 如示例所示...

谢谢!

【问题讨论】:

    标签: android multithreading communication android-activity


    【解决方案1】:

    如果您在类而不是方法中定义 mResults,您可以从任一位置更改它。例如:

    protected Object mResults = null;
    

    (使用受保护,因为it's faster

    【讨论】:

    • Android 性能文档建议包范围,而不是受保护。 protected 可以将实现细节泄漏到包外的子类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多