Android 如何对ToggleButton侦听器和AsyncTask调用进行排序?

Android 如何对ToggleButton侦听器和AsyncTask调用进行排序?,android,sockets,android-asynctask,toggle,listener,Android,Sockets,Android Asynctask,Toggle,Listener,我将尝试在不粘贴任何代码的情况下设置问题,因为这样可能会更清楚 我有一个android应用程序,只有一个切换按钮。当ToggleButton为“开”时,它使用异步任务中的套接字启动通信;当ToggleButton为“关”时,它停止通信。 我正在使用事件集OnCheckedChangeListener来检测按钮中的更改 哪一个是对所有代码进行排序的正确方法?我是否在UI线程上设置侦听器,从UI调用asyncTask并从asyncTask返回与我建立连接的套接字? 我需要知道开关插座是打开的,一旦开

我将尝试在不粘贴任何代码的情况下设置问题,因为这样可能会更清楚

我有一个android应用程序,只有一个切换按钮。当ToggleButton为“开”时,它使用异步任务中的套接字启动通信;当ToggleButton为“关”时,它停止通信。 我正在使用事件集OnCheckedChangeListener来检测按钮中的更改

哪一个是对所有代码进行排序的正确方法?我是否在UI线程上设置侦听器,从UI调用asyncTask并从asyncTask返回与我建立连接的套接字? 我需要知道开关插座是打开的,一旦开关按钮被关闭,它就会被关闭


我觉得有点乱,有没有更好的方法呢?

有几种可能的方法。您可以为您的案例使用广播发送器和接收器

下述步骤:

步骤1:在AsyncTask中创建广播接收器以接收来自活动的广播

BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals("close_socket")) {
                // close your socket here.
            }
        }
    };
步骤2:创建广播接收器后注册接收器

IntentFilter filter = new IntentFilter("close_socket");
registerReceiver(receiver, filter);
步骤3:从活动中发送广播以关闭套接字

Intent intent = new Intent("close_socket");
SendBroadcast(intent);

无论您在何处注册了广播接收器,它都会自动接收广播并关闭插座。希望它能帮助你。

我想问一件事。假设用户非常频繁地单击ToggleButton,所以每次都会创建AsyncTask,如果您在AsyncTask中创建套接字,则无论是否每次都会创建套接字。您可能正在使用异步任务,因为可能有一些繁重的任务。因此,您确定如果您快速单击,它将关闭所有套接字。我在asyncTask中做的第一件事是禁用按钮,直到创建套接字。我认为您可以轻松地在asyncTask中关闭套接字,只需创建广播发送器和接收器。在asyncTask中接收广播,然后关闭套接字。这样,您就不需要维护任何对象来关闭套接字。一旦你们将发送广播,它将关闭相应异步任务中的套接字。若你们需要我可以发布的braodcast发送方和接收方示例,那个将非常有用!