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");
我使用蓝牙客户端-服务器通信将数据从 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");