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