java – 如何让连接线程保持活动状态? (我需要使用守护进程吗?)

我的
Android应用程序使用线程从通过USB连接的PC侦听套接字连接.在PC打开连接(响应某些用户驱动的事件)后的某个时刻,我想通过它发送一些数据.

public void onCreate(Bundle savedInstanceState) {

    // SNIP: stuff and nonsense

    connection = new Thread(new ServerThread());
    connection.start();
}

public boolean onTouchEvent(MotionEvent event) {

    // SNIP: decide what to do; create string 'coordString'

    Message coordMsg = coordHandler.obtainMessage();
    Bundle coordMsgData = new Bundle();
    coordMsgData.putString("coords", coordString);
    coordMsg.setData(coordMsgData);
    if(coordHandler!=null)
    {
        coordHandler.sendMessage(coordMsg);
    }

    return false;
}

public class ServerThread extends Thread
{   
    public void run() {

        this.setName("serverThread");

        Looper.prepare();

        coordHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg) {
                Log.v(INNER_TAG,"here");
            }
        };

        // SNIP: Connection logic here

        Looper.loop();
    }
}.

多年来,我一直在摸不着头脑,想知道为什么我从未在触摸事件后看到INNER_TAG的值出现在我的日志中.我可以使用日志调试来跟踪执行到coordHandler!= null块,但处理程序似乎永远不会触发.

然后它让我感到震惊:线程可能在完成连接后退出. D’呃!不太确定我以前发生过什么事情,但我会责怪它认为Loop正在做一些神奇的事情.

所以我的问题是:如何保持我的线程运行?官方Android dev reference on threads简要提到了这一点

A Thread can also be made a daemon, which makes it run in the background.

这自然使我的* nix感觉刺痛. (顺便说一下,你看过新的蜘蛛侠电影了吗?它还不错.)守护进程是答案吗?还是我完全失去了阴谋?

最佳答案 在Android中使用服务.

您可以使用服务在后台运行..

看到这个链接:

http://developer.android.com/reference/android/app/Service.html

请参阅此链接以获取示例:

Example: Communication between Activity and Service using Messaging

点赞