我使用蓝牙客户端 - 服务器通信将数据从Android手机发送到谷歌眼镜。多次运行代码后,我释放了GC_FOR_ALLOC ......垃圾收集问题 而且谷歌玻璃的记忆几乎已满, 这是我认为问题的原因的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内存的方法
答案 0 :(得分:0)
由于android使用Linux内核,你可以坚持执行命令的传统方法,以便从谷歌眼镜中释放一些内存。
但是在看了你的代码之后,你正在执行while循环中的所有后台任务并将其显示在同一循环中的UI线程上。这实际上是一项昂贵的操作,也可能导致Google Glass的升温。我建议你更改代码,以便所有后台任务在Async Task线程中单独进行,然后在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");