Google玻璃的记忆

Memory of Google glass

我使用蓝牙客户端-服务器通信将数据从 Android 手机发送到 Google Glass.After 运行 代码多次,我有 GC_FOR_ALLOC释放...垃圾收集问题 Google glass 的内存快满了, 这是 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());
                  }
              });
          }
      }

拜托,我需要一种方法来清理 Google Glass

的内存

由于 android 使用 Linux 内核,您可以坚持执行命令的传统方法,以便从 Google Glass 释放一些内存。

但是在必须查看您的代码之后,您正在 while 循环中执行所有后台任务,并将其显示在同一循环中的 UI 线程上。这确实是一项昂贵的操作,可能也会导致 Google 玻璃变热。我建议您更改代码,以便所有后台任务都在异步任务线程内单独进行,然后在 postexecute() 方法中的 activity 上显示数据。

这是示例代码。

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");