- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的项目中包含了一个套接字,它运行良好。我的服务器收到了我的请求,我的应用收到了答复。除了垃圾收集器之外,几乎所有权利都开始循环并且没有停止。
我之前杀死了所有的 Intent (包括调用套接字的 Intent ),我尝试了 socket.disconnect,我关闭了我的应用程序(并且 GC 仍在运行)但没有工作。
如果我再次运行我的应用程序或在配置中强制停止,GC 就会停止。
我的代码和日志在哪里
public class ListaRestaurantesActivity extends Activity implements NumberPicker.OnValueChangeListener {
private static Context context;
private static Dialog dialog;
private static NumberPicker numberPickerDialog;
private Button botaoOkDialog;
private Button botaoCancelDialog;
private ListView lv_telaListaRestaurante_Lista;
private ListaRestaurantesAdapter lra;
private List<ListaRestauranteTO> listaRestauranteTO;
public static void entraMesaAprovado(String idRestaurante) {
Intent mesa = new Intent(context, SelectedRestauranteActivity.class);
mesa.putExtra("numeroMesa", String.valueOf(numberPickerDialog.getValue()));
mesa.putExtra("idRestaurante", idRestaurante);
context.startActivity(mesa);
dialog.dismiss();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_restaurante);
lv_telaListaRestaurante_Lista = (ListView) findViewById(R.id.lv_telaListaRestaurante_Lista);
dialog = new Dialog(ListaRestaurantesActivity.this);
dialog.setContentView(R.layout.view_alert_dialog);
dialog.setTitle(R.string.txt_alertDialog_Cabecalho);
numberPickerDialog = (NumberPicker) dialog.findViewById(R.id.np_viewAlertDialog_NumeroMesa);
botaoOkDialog = (Button) dialog.findViewById(R.id.bt_viewAlertDialog_OK);
botaoCancelDialog = (Button) dialog.findViewById(R.id.bt_viewAlertDialog_Cancel);
new AsyncTask<Context, Void, Void>() {
private UtilWS ws;
private JsonElement jsonElement;
private Gson gson = new Gson();
private Type type = new TypeToken<ListaRestauranteTO>() { }.getType();
@Override
protected void onPreExecute() {
super.onPreExecute();
ws = new UtilWS();
listaRestauranteTO = new ArrayList<ListaRestauranteTO>();
}
@Override
protected Void doInBackground(Context... params) {
context = params[0];
String[] postResult = ws.post(UtilWS.URL_LISTA_LOCAIS, "");
if (postResult[0].equals("200")) {
JsonObject temp = new JsonParser().parse(postResult[1]).getAsJsonObject();
JsonArray jsonArray = temp.getAsJsonArray("restaurantes");
for (int i = 0; i < jsonArray.size(); i++) {
jsonElement = jsonArray.get(i);
listaRestauranteTO.add((ListaRestauranteTO) gson.fromJson(jsonElement, type));
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
lra = new ListaRestaurantesAdapter(context, listaRestauranteTO);
lv_telaListaRestaurante_Lista.setAdapter(lra);
}
}.execute(this);
lv_telaListaRestaurante_Lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
Log.i("Contents", " = " + view.getTag());
show((String) view.getTag());
}
});
}
public void show(final String idRestaurante)
{
String[] listaMesas = null;
for (int i = 0; i < listaRestauranteTO.size(); i++) {
for (int j = 0; j < listaRestauranteTO.get(i).getMesas().size(); j++) {
if (listaRestauranteTO.get(i).getMesas().get(j).getRestaurante_id().equals(idRestaurante)) {
if (listaMesas == null) {
listaMesas = new String[listaRestauranteTO.get(i).getMesas().size()];
}
listaMesas[j] = listaRestauranteTO.get(i).getMesas().get(j).getNumero();
} else {
j = listaRestauranteTO.get(i).getMesas().size() + 1;
}
}
}
numberPickerDialog.setMinValue(1);
numberPickerDialog.setMaxValue(listaMesas.length);
numberPickerDialog.setDisplayedValues(listaMesas);
numberPickerDialog.setWrapSelectorWheel(false);
numberPickerDialog.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
numberPickerDialog.setOnValueChangedListener(this);
botaoOkDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
new ReceiveCallback(context, String.valueOf(numberPickerDialog.getValue()), idRestaurante);
return null;
}
}.execute();
}
});
botaoCancelDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
}
}
class ReceiveCallback implements IOCallback {
private SocketIO socket = new SocketIO();
private FBSessionsManager fbSessionsManager;
private Context context;
private String idRestaurante;
public ReceiveCallback(Context context, String mesaNumero, String idRestaurente) {
this.context = context;
idRestaurante = idRestaurente;
fbSessionsManager = new FBSessionsManager(this.context);
try {
socket.connect("http://192.168.25.5:3001/", this);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
socket.emit("solicita-mesa", new JSONObject().put("userId", fbSessionsManager.getStoredPrivateSession()[1])
.put("mesaNumero", mesaNumero).put("restauranteId", idRestaurente));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
Log.i("Server said:" + json.toString(2), ".");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
Log.i("Server said: " + data, ".");
}
@Override
public void onError(SocketIOException socketIOException) {
Log.i("an Error occured", ".");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
Log.i("Connection terminated.", ".");
}
@Override
public void onConnect() {
Log.i("Connection established", ".");
Intent i = new Intent(context, MensagemAguardeActivity.class);
context.startActivity(i);
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
JSONObject object = (JSONObject) args[0];
if (event.equals("confirmacao")) {
try {
if ((Boolean) object.get("confirmado")) {
ListaRestaurantesActivity.entraMesaAprovado(idRestaurante);
}
socket.disconnect();
} catch (JSONException e) {
e.printStackTrace();
}
}
if (event.equals("remove-prato")) {
}
}
}
01-29 12:02:10.161 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 6589K, 30% free 16328K/23076K, paused 1ms+2ms, total 31ms
01-29 12:02:16.341 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 18334K, 60% free 12654K/31144K, paused 1ms+1ms, total 53ms
01-29 12:02:22.471 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14657K, 60% free 12646K/31144K, paused 1ms+11ms, total 64ms
01-29 12:02:28.591 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14648K, 54% free 12651K/27460K, paused 1ms+1ms, total 52ms
01-29 12:02:34.731 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14654K, 54% free 12649K/27464K, paused 11ms+0ms, total 63ms
01-29 12:02:40.841 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14654K, 54% free 12646K/27464K, paused 1ms+1ms, total 53ms
01-29 12:02:46.991 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14650K, 54% free 12652K/27464K, paused 1ms+1ms, total 52ms
01-29 12:02:53.091 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14658K, 54% free 12654K/27468K, paused 1ms+1ms, total 52ms
01-29 12:02:59.221 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14658K, 54% free 12642K/27468K, paused 1ms+1ms, total 47ms
01-29 12:03:05.591 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14646K, 54% free 12641K/27468K, paused 12ms+1ms, total 66ms
01-29 12:03:11.781 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14646K, 54% free 12649K/27456K, paused 12ms+13ms, total 75ms
01-29 12:03:17.951 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14654K, 54% free 12648K/27464K, paused 1ms+11ms, total 63ms
01-29 12:03:24.071 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14654K, 54% free 12644K/27464K, paused 11ms+1ms, total 64ms
01-29 12:03:30.191 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14650K, 54% free 12654K/27460K, paused 1ms+1ms, total 52ms
01-29 12:03:36.331 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14658K, 54% free 12648K/27468K, paused 12ms+11ms, total 74ms
01-29 12:03:42.471 8994-8996/br.com.timo.xxxx D/dalvikvm﹕ GC_CONCURRENT freed 14650K, 54% free 12642K/27468K, paused 11ms+0ms, total 63ms
我需要做什么来停止这个 GC 循环?它消耗大量电池。
感谢和问候。
更新
我正在使用这个套接字库。
2014 年 2 月 4 日更新
经过一番测试,我找到了线索。方法 socket.disconnect 导致我的应用程序循环,现在我遇到了另一个问题。
我该怎么办?如果我执行方法 socket.disconnect GC 将无限运行,如果我不使用 socket.disconnect 应用程序将保持套接字打开并工作并且会消耗大量电池。
2014 年 2 月 6 日更新
我仍然没有解决这个问题,但我在 Github 上阅读了 SocketIO 的问题,我看到很多开发人员都有同样的错误,直到今天问题仍然存在。
SocketIO 项目的问题链接在这里:Issues Project SocketIO
最佳答案
我在 Android 中调用 socket.disconnect() 时遇到了同样的问题。
这是它是如何修复的。
检查来自 https://github.com/Gottox/socket.io-java-client 的 socket.io-java-client 项目;
下载Java-WebSocket-1.3.0.jar;
将socket.io项目lib文件中的WebSocket.jar替换为java-websocket-1.3.0.jar;
使用ant将socket.io-java-client编译成jar;
然后将 socketio.jar 替换为您刚刚构建的新文件。
希望这对您有所帮助。
关于java - 使用套接字时垃圾收集器循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433750/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!