Yur*_*yak 7 java multithreading android
我正在开发一个Android应用程序,我有一个启动/暂停某些模拟过程的按钮.在此过程运行时,我需要实时输出一些数据.但是当我为模拟创建一个新线程时,我无法从该线程访问视图(让它成为TextView),因为它们只能从创建它们的线程访问.另一方面,新线程是必要的,因为否则用户在模拟运行时将无法执行任何操作(例如,按某些其他按钮).在这种情况下,创建新服务还需要创建新线程.我该如何解决这个问题?
你可以用很多方式处理它,
尝试在此使用AsyncTask,您的后台工作在doInBackGround()方法中完成,并且您的UI不会阻塞,您还可以通过publishProgress()和onProgressUpdate()通过其上下文从您调用AsyncTask的位置访问Activity的视图.
如果您使用的是简单的线程,然后使用Handler或message或runOnUiThread,则可以更新主线程的视图.
但, in your way I think AsyncTask is best for you.
您可以使用android.os.Handler解决问题。Handler 实例绑定到创建它的线程,您可以将 Runnables 发送给它,它将在它绑定的线程中执行它们。例如:
import android.os.Handler;
import android.widget.TextView;
public class MyActivity extends Activity {
private Handler uiHandler;
private TextView simulationStatus;
@Override
public void onCreate(Bundle savedInstanceState) {
...
uiHandler = new Handler();
...
simulationStatus = (TextView) findViewById(R.id.simulationStatus);
...
}
// This method is to be executed on the simulation thread.
public void simulate() {
...
final String simulationStatusText = ...;
...
uiHandler.post(new Runnable() {
@Override
public void run() {
// This is run on the UI thread.
simulationStatus.setText(simulationStatusText);
...
}
});
}
...
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用AsyncTask。例如,请参阅链接。
| 归档时间: |
|
| 查看次数: |
8541 次 |
| 最近记录: |