Android AsyncTask在开始时挂起

Android AsyncTask在开始时挂起,android,android-asynctask,Android,Android Asynctask,AsyncTask在安卓4.x中运行良好,但不适用于安卓2.3.6。我已经用一个物理移动设备一步一步地调试了安卓2.3.6 它挂在这里: myTask = new GetDataFromServer(); GetDataFromServer是AsyncTask的类 发生什么事了 下面是我的代码,我在代码中只使用了1个AsyncTask,并从服务器接收消息。 就这些 class GetDataFromServer extends AsyncTask<String, String, Stri

AsyncTask
在安卓4.x中运行良好,但不适用于安卓2.3.6。我已经用一个物理移动设备一步一步地调试了安卓2.3.6

它挂在这里:

myTask = new GetDataFromServer();
GetDataFromServer
AsyncTask
的类

发生什么事了

下面是我的代码,我在代码中只使用了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();
    }

};
GetDataFromServer类扩展了异步任务
{
受保护的void onPreExecute()
{
progressDialog1=ProgressDialog.show(MainActivity.this,“正在加载数据”,“请稍候…”,true);
}
受保护的字符串doInBackground(字符串…参数)
{
字符串resultText=“”;
试一试{
serverIp=InetAddress.getByName(“192.168.1.123”);
int serverPort=31000;
Socket clientSocket=新套接字(serverIp、serverPort);
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(clientSocket.getOutputStream());
写入(参数[0]);
bw.flush();
BufferedReader br=新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream());
resultText=br.readLine();
if(resultText.contains(“OK”))
{
出版进度(ResultText);
}
其他的
{
出版进度(ResultText);
clientSocket.close();
bw.close();
br.close();
返回null;
}
结果xt=“”;
resultText=br.readLine();
resultText=resultText.trim();
clientSocket.close();
}捕获(IOE异常){
如果(状态_txt!=null)
状态_txt.append(“服务器已完成”);
}
捕获(NetworkOnMainThreade异常){
如果(状态_txt!=null)
Status_txt.append(“NetworkOnMainThreadException”);
}
返回结果文本;
}
受保护的void onProgressUpdate(字符串…inStr){
字符串[]strData=inStr[0]。拆分(“”);
String szTemp=“上次购买日期:”;
szTemp+=strData[1];
szTemp+=”,有效天数:”;
szTemp+=标准数据[2];
//状态_txt.setText(szTemp);
如果(状态_txt!=null)
Status_txt.setText(“您是超级用户”);
}
受保护的void onPostExecute(字符串数据){
tl_prediction2.removeallview();
如果(数据==null)
{
}
否则{
if((data.contains(“#”)==true)| |(data.contains(“*”==true)
||data.contains(“&”)==true)
{
字符串[]arrayTmp=data.split(“#”);

for(Integer i=0;iAsyncTask与ThreadPool一起工作。如果执行的synctasks太多,后面的AsyncTask将被其他人阻止。我认为您可以使用DDMS中的thread工具检查正在执行的ayncTasks的数量。

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

  • 可能是您的AsyncTask需要大量时间下载。请尝试使用
    android.os.Process.setThreadPriority(9)
    inside
    doInBackground()

  • 检查代码中是否有其他以前运行的长AsyncTask。默认情况下,AsyncTask在单个后台线程上运行。这意味着除非完成以前的AsyncTask,否则不会执行AsyncTask任务。若要允许并行执行,请使用
    executeOnExecutor(AsyncTask.thread\u POOL\u EXECUTOR,params)
    。您可以阅读更多内容

  • 检查清单中的Internet和其他权限。这通常是人们犯错误的地方


  • 您还必须发布GetDataFromServer类的代码。发布logcat stacktracethere只是我使用的一个异步任务。它可能是Android版本吗?挂在新的GetDataFromServer()上?添加一些登录onPreExecute()和doInBackground()