代码之家  ›  专栏  ›  技术社区  ›  Alin

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

  •  1
  • Alin  · 技术社区  · 14 年前

    我承认,我对整个安卓系统都是新手。我试图做一个应用程序,但随机我得到强迫关闭错误,我真的不知道为什么。我的应用程序有许多活动,当我启动一个新的活动时,它们都没有完成。我从web上获取数据(通过web服务和直接图像下载),我经常使用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 回复  |  直到 14 年前
        1
  •  0
  •   Community CDub    8 年前

    你得问问你的内心 AsyncTask isCancelled() 然后决定怎么做。

    支票 this question . 罗曼·盖伊对此有很好的解释:

    可以停止异步任务。如果你打电话 取消(真),中断将是 发送到后台线程,其中 可能有助于中断任务。 否则,你只需确保 定期检查 doInBackground()方法。你可以 请参阅此处的示例 code.google.com/p/shelves。

        2
  •  2
  •   Umakant Patil    14 年前

    你的代码有问题。我已更正如下:你发现我已添加 调用异步任务时。 异步任务接受上下文作为参数,而您没有传递该参数。

    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.trackslist);
    
         backTask = new BackTask();
         backTask.execute(this);
    }