Sco*_*ott 2 multithreading android
我有一些活动.在主活动中,我有一个登录屏幕,当用户按下登录按钮时,启动一个线程以显示进度对话框,直到用户通过身份验证.此时,我加载下一个活动,该活动有几个字段供用户输入数据.
在这里,用户输入一些数据并按下按钮来处理它.数据将传递到实际处理和显示数据的新活动.这是我创建新线程的地方以及当我调用thread.start()时它崩溃的地方; 我不知道为什么会这样.
这两个活动都在实施Runnable.
我使用下面相同的代码在第一个活动的按钮按下和最后一个活动的onCreate方法中创建并调用thread.start():
pd = ProgressDialog.show(search_results.this, "", "Searching...", true, false);
Thread thread = new Thread(this);
thread.start();
Run Code Online (Sandbox Code Playgroud)
我也使用下面相同的代码来处理两者的线程.
public void run() {
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
pd.dismiss();
}
};
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我真的不明白它为什么会崩溃.
虽然我鼓励人们使用AsyncTask,但并不是真的需要,特别是对于简单的事情,如进度/加载对话框.这不是问题所在.
您的问题和代码令人困惑.我不确定哪些代码在哪里进行,在哪些活动上,我希望你不要在活动之间打开对话框,试图在它们之间访问它们(当然它不会起作用).此外,提供Context给Thread甚至不编译(它的标记在设计时的错误).总而言之,您没有提供日志条目.对不起,我无法理解你在做什么或错误在哪里.我们只能猜测.
以下是使用a Handler,a Runnable和a 执行此操作的可能方法之一Thread.当我第一次学习如何使用它时,这是从Developer Resource获取的:
1-你宣布一个Handler.大多数人在该onCreate部分执行此操作以经常重复使用它:
Handler mHandler = new Handler();
Run Code Online (Sandbox Code Playgroud)
2-当你需要时,你开始Thread:
new Thread() { public void run() {
mHandler.post(mLoadingData);
// ... do work
mHandler.post(mLoadingDataStop);
}}.start()
Run Code Online (Sandbox Code Playgroud)
3-这些是Runnable发布到Handler:
private final Runnable mLoadingData = new Runnable() {public void run() {
showDialog(LOADING_DIALOG); // In your case, show your custom dialog
}};
private final Runnable mLoadingDataStop = new Runnable() {public void run() {
dismissDialog(LOADING_DIALOG); // In your case, dismiss the dialog
}};
Run Code Online (Sandbox Code Playgroud)
对于进度对话框,事情需要更多工作(更新进度等),但对于加载对话框,您不需要真正搞乱消息.
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |