很多处理程序,不是每个都会执行

时间:2018-12-01 15:34:35

标签: android

我的应用程序从服务器获取地图标记的数据。每当有新的标记到达时,都应通知地图并添加标记。服务器交互在其自己的线程中运行。因为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就会破坏线程。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

Android不会破坏线程,但是在您的代码中没有创建线程-处理程序位于主线程上。在最坏的情况下,处理程序消息将被删除,但事实并非如此。

此外,还有一种更好的方法来做您正在做的事情-创建所有职位,然后发送带有一组职位的消息。做一个线程切换总是比执行100更好。

相关问题