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) 线程上进行。因此,每个回调方法都会 运行 在调用下一个方法之前完成。
我的服务有一个覆盖 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) 线程上进行。因此,每个回调方法都会 运行 在调用下一个方法之前完成。