当被多次调用时,android phonestatelistener的行为是什么?

chhkpiq4  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(366)

我的服务有一个phonestatelistener,它重写oncellinfochanged方法。在androidstudio上运行时,每当调用该方法时,它都会记录日志。基于日志,似乎有时会连续调用该方法(两个日志之间间隔几毫秒)。

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,调用另一个方法来获取一个列表,该列表包含从原始列表的子集生成的自定义类对象的列表。它使用时间戳和来自每个列表对象的其他各种信息写入文件。
当监听器的方法在同一方法执行时被再次调用时,当前方法是否停止并重新启动新的调用?它是否在单独的执行线程中运行?它是否等待方法完成执行?如果另一个调用确实停止或干扰了同一方法的执行,我如何实现线程和/或同步以确保在保持顺序的同时完整地执行每个调用?

cs7cruho

cs7cruho1#

来自的回调 PhoneStateListener 都是在主(ui)线程上生成的。因此,在调用下一个回调方法之前,每个回调方法都将运行到完成。

相关问题