2015-03-25 48 views
0

我使用藍牙客戶端 - 服務器通信將數據從Android手機發送到Google Glass.多次運行代碼後,我有GC_FOR_ALLOC被釋放...垃圾回收問題 和Google玻璃的內存是幾乎全滿, 這是while循環,我認爲這個問題谷歌眼鏡記憶

private void manageConnectedSocket(BluetoothSocket socket) { 


     while(socket.isConnected()) { 
      try { 
       BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

       mResult = input.readLine(); 
       prev=mResult; 
       if(!prev.equals(next)){ 
       System.out.println("result=" + mResult); 
       /** PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
       //out.println(Integer.parseInt(mResult)+50); 
       out.println(mResult);**/ 

       runOnUiThread(new Runnable() { 
        public void run() { 
         mTvInfo.setText(mResult); 
         next=prev; } 
       }); 
       } 
       // socket.close(); 
      // manageConnectedSocket(socket); 
      } catch (IOException e) { 
       final IOException ex = e; 
       runOnUiThread(new Runnable() { 
        public void run() { 
         mTvInfo.setText(ex.getMessage()); 
        } 
       }); 
      } 
     } 

請,我需要一種方法來清潔谷歌眼鏡的內存的原因

回答

0

由於Android採用Linux內核你能堅持到執行命令的傳統方法以釋放一些備忘錄來自Google Glass。

但是在查看你的代碼之後,你正在執行while循環中的所有後臺任務,並在同一個循環中在UI線程中顯示它。這實在是一項非常昂貴的操作,可能導致Google Glass的升溫。我建議你改變代碼,以便所有的後臺任務在異步任務線程內單獨進行,然後在postexecute()方法的活動中顯示數據。

以下是示例代碼。

private class HttpGetter extends AsyncTask<URL, Void, Void> { 

       @Override 
       protected Void doInBackground(URL... urls) { 
         // TODO Auto-generated method stub 
         StringBuilder builder = new StringBuilder(); 
         HttpClient client = new DefaultHttpClient(); 
         HttpGet httpGet = new HttpGet(urls[0]); 

         try { 
           HttpResponse response = client.execute(httpGet); 
           StatusLine statusLine = response.getStatusLine(); 
           int statusCode = statusLine.getStatusCode(); 
           if (statusCode == 200) { 
             HttpEntity entity = response.getEntity(); 
             InputStream content = entity.getContent(); 
             BufferedReader reader = new BufferedReader(
                 new InputStreamReader(content)); 
             String line; 
             while ((line = reader.readLine()) != null) { 
               builder.append(line); 
             } 
             Log.v("Getter", "Your data: " + builder.toString()); //response data 
           } else { 
             Log.e("Getter", "Failed to download file"); 
           } 
         } catch (ClientProtocolException e) { 
           e.printStackTrace(); 
         } catch (IOException e) { 
           e.printStackTrace(); 
         } 

         return null; 
       } 
    } 

HttpGetter get = new HttpGetter(); 
get.execute("http://www.google.es");