Android为什么我的应用程序强制关闭?
我承认,我是全新的Android系统。我试图做一个应用程序,但随机我得到强制关闭错误,我真的不知道为什么。我的应用程序有很多活动,当我开始一个新活动时,他们都没有完成()。我从网上获取数据(通过网络服务和直接图像下载),我使用AsyncTask很多。大多数时候它在asynctask上崩溃。以下是我如何做事的示例:Android为什么我的应用程序强制关闭?
private BackTask backTask;
Activity ctx = this;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute();
}
protected class BackTask extends AsyncTask<Context, String, myObject>
{
@Override
protected myObject doInBackground(Context... params)
{
try{
if (hasInternet(ctx)==true)
{
//access the web SERVICE here
//initialize myObject WITH result FROM the web
return myObject
}
else
{
return null
}
}catch(Exception ex){
return null;
}
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
}
@Override
protected void onCancelled()
{
super.onCancelled();
}
@Override
protected void onPostExecute(myObject result)
{
super.onPostExecute(result);
if (result==null || result.isEmpty())
{
//no valid result, show a message
}
else
{
//result valid do something with it
}
}
}
@Override
public void onPause()
{
if (backTask!=null && ! backTask.isCancelled())
{
backTask.cancel(true);
}
super.onPause();
}
public void btnStartOnClick(View target) {
Intent intent = new Intent(this, MyNewActivity.class);
startActivity(intent);
}
当活动获取onPause()时,任务正在被取消。我不确定在try/catch期间发生了什么,如果出现错误,我应该返回null,但我认为在这里我错过了一些东西。正如我之前所说的,即使我在另一个活动中,我也会随机得到一支力量。这真令人沮丧,因为我无法提供具有此行为的应用程序。那么,我做错了什么?
你要问你的AsyncTask
类中为isCancelled()
,然后再决定该怎么做。
检查this question。 Romain Guy有一个很好的解释:
你可以停止一个AsyncTask。如果您致电 取消(true),则将中断发送到后台线程 ,其中 可能有助于中断任务。 否则,您应该简单地确保 检查isCancelled()定期在 您的doInBackground()方法。您可以通过 code.google.com/p/shelves查看相关示例。
代码存在问题。我已更正如下:您发现我在调用异步任务时添加了这个。 您的异步任务接受上下文作为参数,并且您没有传递该参数。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute(this);
}
我从来没有使用execute(this)。奇怪的是,我没有设法找到任何信息,如果它的要求或不。你能否详细说明为什么它是必要的?谢谢。 – Alin 2010-11-19 07:21:32
阿林,它没有必要。你已经将Context定义为第一个参数“extends AsyncTask
现在我明白了,好点。有趣的是,它的工作原理就是如此。如果出现问题,尝试抓住会发生什么?它是否返回null到onPostExecute? – Alin 2010-11-19 07:43:11
如果有FC,您应该检查日志(从sdk/tools目录下的命令行中的'adb shell logcat';或者在Eclipse DDMS视图中)。然后在这里粘贴错误日志。 – 2010-11-19 06:30:44
我检查了日志,并在asynctask中变化为空指针异常......事情是,当我收到消息时,我正在进行另一项活动。 – Alin 2010-11-19 07:14:29