Android - 启动线程崩溃应用程序

时间:2011-06-24 22:35:35

标签: android multithreading

我有一些活动。在主活动中,我有一个登录屏幕,当用户按下登录按钮时,启动一个线程以显示进度对话框,直到用户通过身份验证。此时我加载下一个活动,该活动有几个字段供用户输入数据。

这里用户输入一些数据并按下按钮来处理它。数据将传递到实际处理和显示数据的新活动。这是我创建新线程的地方以及当我调用thread.start()时它崩溃的地方;我不知道为什么会这样。

这两项活动都在实施Runnable。

我使用下面相同的代码在第一个活动的按钮按下和最后一个活动的onCreate方法中创建并调用thread.start():

pd = ProgressDialog.show(search_results.this, "", "Searching...", true, false);
    Thread thread = new Thread(this);
    thread.start();

我也使用下面相同的代码来处理两者的线程。

public void run() {
    handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {            
            pd.dismiss();               
    }
};

我错过了什么吗?我真的不明白为什么会崩溃。

2 个答案:

答案 0 :(得分:5)

虽然我鼓励人们使用AsyncTask,但实际上并不需要 ,尤其是对于简单的事情,例如进度/加载对话框。那里的不是问题。

您的问题和代码令人困惑。我不确定哪些代码在哪里进行,在哪些活动上,我希望你不要在活动之间打开对话框,试图在它们之间访问它们(当然它不会起作用)。此外,向Context提供Thread甚至无法编译(在设计时标记为错误)。总而言之,您没有提供日志条目。对不起,我无法理解你在做什么或错误在哪里。我们只能猜测。

以下是使用HandlerRunnableThread执行此操作的可能方法之一。当我第一次学习如何使用它时,这是从Developer Resource获取的:

1-您宣布Handler。大多数人在onCreate部分执行此操作以经常重复使用它:

Handler mHandler = new Handler();

2-如果需要,可以开始Thread

new Thread() { public void run() {
    mHandler.post(mLoadingData);
    // ... do work
    mHandler.post(mLoadingDataStop);
}}.start()

3-这些是发布到Runnable的{​​{1}}:

Handler

对于进度对话框,事情需要更多工作(更新进度等),但对于加载对话框,您不需要真正搞乱消息。

答案 1 :(得分:0)

在为平板电脑开发时,我遇到了同样的问题。在某个API之后,我想3.0(sdk 11),Android强制应用程序在单独的线程上运行长时间运行的进程,否则它会杀死它。 Logcat将确认这一点。

我知道你正在使用另一个帖子,但这对我也不起作用。尝试使用AsyncTask。你可以创建一个快速的内部类,在我看来,它比处理你自己的线程更容易。 AsyncTask有几个在UI线程上运行的函数和一对在自己的线程上运行的函数。这允许您在用户界面线程上启动“加载”用户界面对象,在后端线程上进行处理,然后在完成后,它将通知用户界面线程函数。

您需要专门查看覆盖

onPreExecute() doInBackground() onPostExecute()