我承认,我对这整个Android内容都很陌生。我试图制作一个应用程序,但随机我得到Force关闭错误,我真的不知道为什么。我的应用程序有很多活动,当我开始一个新活动时,它们都没有完成()。我从网上获取数据(通过Web服务和直接图像下载),我经常使用AsyncTask。大部分时间它都会在asynctask上崩溃。以下是我如何做事的示例:
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,但我想在这里我想念一些东西。正如我之前所说,即使我在另一个活动中,我也会随机关闭一个力量。这真是令人沮丧,因为我无法提供具有此行为的应用程序。那么,我做错了什么?
答案 0 :(得分:2)
您的代码存在问题。我已更正如下:您发现我在调用异步任务时添加了此。 你的异步任务接受上下文作为参数,你没有传递它。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute(this);
}
答案 1 :(得分:0)
您需要在AsyncTask
课程内询问isCancelled()
,然后决定该怎么做。
检查this question。 Romain Guy有一个很好的解释:
您可以停止AsyncTask。如果你打电话 取消(true),中断即可 发送到后台线程,其中 可以帮助中断任务。 否则,你应该确保 定期检查isCancelled() 你的doInBackground()方法。您可以 看看这个例子 code.google.com/p/shelves。