2015-03-25 3 views
0

Я использовал связь Bluetooth Client-Server для отправки данных с Android-мобильного на Google Glass. После многократного запуска кода у меня был GC_FOR_ALLOC ... проблема с сборкой мусора и память стекла Google почти полный, и это петля в то время, что я думаю, что причина проблемыПамять Google Glass

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()); 
        } 
       }); 
      } 
     } 

Пожалуйста, мне нужен способ, чтобы очистить память Google Glass

ответ

0

Поскольку Android использует ядро ​​Linux вы можете придерживаться к традиционному методу выполнения команд, чтобы выпустить часть заметки из Google Glass.

Но после того, как вы посмотрите на свой код, вы выполняете всю фоновое задание во время цикла и берете его и отображаете его в потоке пользовательского интерфейса в том же цикле. Это действительно дорогостоящая операция, которая может привести к нагреву Google Glass. Я предлагаю вам изменить код, чтобы вся фоновая задача выполнялась отдельно в потоке задачи Async, а затем отображала данные о деятельности в методе 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");