2011-06-24 137 views
2

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

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

这两个活动都在实施Runnable。

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

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();    
    } 
}; 

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

+0

你能发布错误的堆栈跟踪吗? –

回答

0

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

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

你要具体看覆盖

onPreExecute() doInBackground() onPostExecute()

+0

此方法奏效,感谢您的帮助。 – Scott

4

虽然我鼓励人们使用AsyncTask,这不是真正需要,特别是对于简单像进度/加载对话框。这是不是这里的问题。

你的问题和你的代码很混乱。我不确定哪些代码会出现在哪些地方,哪些活动上,并且我希望您不要在活动之间打开对话框,试图通过它们访问它们(当然这不起作用)。此外,提供ContextThread甚至不会编译(它在设计时标记为错误)。总而言之,您没有提供日志条目。对不起,我无法理解你在做什么或错误在哪里。我们只能猜测。

下面是使用HandlerRunnableThread执行此操作的可能方法之一。当我第一次学习如何使用它时,这取自开发者资源:

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小号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 
}}; 

对于进度对话框,事情需要多做一些工作(更新进度等),但对于加载对话框,你不需要真正处理消息。

+0

哇,我对*试图回答并发布一个可行的解决方案有负面评价吗? (虽然可能不是你想要的/需要的)Sheesh。如果这是一个有建设性的地方,我应该至少得到一个反馈,这样我才能改善自己。 – davidcesarino

+1

好说...投票:) –