我的应用程序从服务器获取地图标记的数据。每当有新的标记到达时,都应通知地图并添加标记。服务器交互在其自己的线程中运行。因为mapview依赖于主循环,所以我需要使用Handler:
package com.example.thesacredhaven.samplessh;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
executeRemoteCommand("pi","root","192.168.219.178",22);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void executeRemoteCommand(
String username,
String password,
String hostname,
int port) throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, 22);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(10000);
session.connect();
// SSH Channel
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand("lsusb > /home/pi/test.txt");
channel.connect();
channel.disconnect();
}
}
现在我进行了测试并添加了100个标记
document.getElementById('delete-form-'+id)
其中 notifyMap(Marker marker) {
Handler handler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
@Override
public void run() {
map.addMarker(marker) }
};
handler.post(runnable);
}
是一个函数,该函数会在应放置标记的位置产生随机坐标。
问题是:进行此测试后,并不是每个都将添加到地图中。从100个标记中可以看到约70个标记。调试器说,markerarray也包含约70个标记。 因此,我认为如果太多,android就会破坏线程。我怎么解决这个问题?
答案 0 :(得分:0)
Android不会破坏线程,但是在您的代码中没有创建线程-处理程序位于主线程上。在最坏的情况下,处理程序消息将被删除,但事实并非如此。
此外,还有一种更好的方法来做您正在做的事情-创建所有职位,然后发送带有一组职位的消息。做一个线程切换总是比执行100更好。