AsyncTask一开始就挂起了

时间:2013-04-19 01:07:37

标签: android android-asynctask

AsyncTask在Android 4.x中运行良好,但不适用于Android 2.3.6。我已经逐步使用物理移动设备调试了Android 2.3.6。

它挂在这里:

myTask = new GetDataFromServer();

GetDataFromServerAsyncTask的类。

发生了什么事?

下面是我的代码,我在代码中只使用了1个AsyncTask并从服务器接收了消息。 就是这样。

class GetDataFromServer extends AsyncTask<String, String, String>
{

    protected void onPreExecute ()
    {

        progressDialog1=ProgressDialog.show(MainActivity.this, "Loading data", "Please wait...",true);
    }
    protected String doInBackground(String... params)
    {

        String resulttxt="";
        try {

            serverIp = InetAddress.getByName("192.168.1.123");


            int serverPort=31000;


            Socket clientSocket=new Socket(serverIp,serverPort);

            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
            bw.write(params[0]);
            bw.flush();


            BufferedReader  br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


            resulttxt=br.readLine();
            if(resulttxt.contains("OK"))
            {
                publishProgress(resulttxt);

            }
            else
            {
                publishProgress(resulttxt);
                clientSocket.close(); 
                bw.close();
                br.close();
                return null;

            }
            resulttxt="";
            resulttxt=br.readLine();
            resulttxt=resulttxt.trim();


            clientSocket.close(); 

        } catch (IOException e) {

            if(Status_txt!=null)
                Status_txt.append( "Server is done.");
        }
        catch (NetworkOnMainThreadException e){
            if(Status_txt!=null)
                Status_txt.append( "NetworkOnMainThreadException");
        }

        return resulttxt;


    }
    protected void onProgressUpdate(String...inStr){

        String[] strData=inStr[0].split("_");
        String szTemp="Last Purchase Date: ";


        szTemp+=strData[1];

        szTemp+="  ,Valid days: ";
        szTemp+=strData[2];
        //Status_txt.setText(szTemp);
        if(Status_txt!=null)
            Status_txt.setText("You Are The Super User");

    }
    protected void onPostExecute(String data) {
        tl_prediction2.removeAllViews();


        if (data == null)
        {

        }
        else {


            if((data.contains("#")==true) || (data.contains("*")==true) 
                    ||data.contains("&")==true)
            {




                String[] arrayTmp=data.split("#");
                for(Integer i=0;i<arrayTmp.length;i++)
                {
                    String[] SubArrayTmp=arrayTmp[i].split("_");

                    tl_prediction2.addView(generateRow(4,SubArrayTmp));

                }
            }

        }
        progressDialog1.dismiss();
    }

};

2 个答案:

答案 0 :(得分:2)

由于您尚未发布任何代码,我只能给您一些随机可能的解决方案:

  1. 可能是你的AsyncTask花了很多时间下载。尝试使用android.os.Process.setThreadPriority(9)

  2. 中的doInBackground()来提高优先级
  3. 检查代码中是否还有其他以前运行的AsyncTask。默认情况下,AsyncTask在单个后台线程上运行。这意味着除非先前的AsyncTask完成,否则不会执行AsyncTask任务。要允许并行执行,请使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params)。您可以阅读更多here

  4. 检查Manifest中的Internet和其他权限。这主要是人们犯错的地方。

答案 1 :(得分:0)

AsyncTask与ThreadPool一起使用。如果执行的synctasks太多,后面的AsyncTask将被其他人阻止。我想你可以使用DDMS中的线程工具来检查执行的ayncTasks的数量。