簡體   English   中英

多次調用時,Android PhoneStateListener 的行為是什么?

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

我的服務有一個覆蓋 onCellInfoChanged 方法的 PhoneStateListener。 在 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,調用另一個方法來獲取一個列表,該列表包含由原始列表子集構成的自定義類對象列表。 它寫入帶有時間戳和來自每個列表對象的其他各種信息的文件。

在執行相同方法的同時再次調用偵聽器的方法時,當前方法是否停止並重新啟動以進行新調用? 它是否在單獨的執行線程中運行? 它是否等待方法完成執行? 如果另一個調用確實停止或干擾了同一方法的執行,我如何實現線程和/或同步以確保在保持順序的同時完全執行每個調用?

PhoneStateListener的回調都是在主 (UI) 線程上進行的。 因此,在調用下一個回調方法之前,每個回調方法都將運行完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM