Android 多次调用 PhoneStateListener 的行为是什么?

What is the Android PhoneStateListener's Behavior When Called Multiple Times?

我的服务有一个覆盖 onCellInfoChanged 方法的 PhoneStateListener。当 运行ning 在 Android Studio 上时,只要调用该方法,它就会记录下来。根据日志,似乎有时会连续调用该方法(日志之间相隔几毫秒)。

public class OnCellChangeService extends Service
{
    // other field declarations

    private PhoneStateListener mPhoneStateListener = new PhoneStateListener()
    {
        @SuppressLint("DefaultLocale")
        @Override
        public void onCellInfoChanged(List<CellInfo> cellInfoList)
        {
            String timeStamp = simpleDateFormat.format(new Date());
            List<CellNetwork> cellNetworks = setCellNetwork(cellInfoList);
            String networkStrength = "";
            int index = 1;
            for (CellNetwork cell : cellNetworks)
                networkStrength += String.format("%s (%d)%s\n", timeStamp, index++, cell.record());

            try {
                writer.write(networkStrength);
                writer.flush();
                Log.d("Phone Listener", "Cell Change");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

   // rest of service

}

侦听器所做的只是获取 cellInfoList,调用另一个方法来获取一个列表,该列表包含由原始列表的子集组成的自定义 class 对象列表。它写入一个文件,其中包含时间戳和来自每个列表对象的其他各种信息。

当正在执行同一方法时再次调用侦听器的方法时,当前方法是否会停止并重新启动以进行新调用?它是否 运行 在单独的执行线程中?它是否等待方法完成执行?如果另一个调用确实停止或干扰了同一方法的执行,我如何实现线程 and/or 同步以确保在保持顺序的同时完整执行每个调用?

来自 PhoneStateListener 的回调全部在主 (UI) 线程上进行。因此,每个回调方法都会 运行 在调用下一个方法之前完成。