Android为什么我的应用程序强制关闭?

时间:2010-11-19 06:26:54

标签: android android-asynctask

我承认,我对这整个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,但我想在这里我想念一些东西。正如我之前所说,即使我在另一个活动中,我也会随机关闭一个力量。这真是令人沮丧,因为我无法提供具有此行为的应用程序。那么,我做错了什么?

2 个答案:

答案 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。