我正在编写一个简单的应用程序来跟踪我的手机信号强度差的时期。我使用 an 来执行此操作IntentService,它侦听PhoneStateListener.LISTEN_SIGNAL_STRENGTHS如下:
public class PoorSignalIntentService extends IntentService {
private TelephonyManager mTelephonyManager;
private PhoneStateListener mPhoneStateListener;
public PoorSignalIntentService() {
super("PoorSignalIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
mPhoneStateListener = new PhoneStateListener(){
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
doSomething(signalStrength);
super.onSignalStrengthsChanged(signalStrength);
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
doSomething(serviceState);
super.onServiceStateChanged(serviceState);
}
};
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS|PhoneStateListener.LISTEN_SERVICE_STATE);
}
private void doSomething(SignalStrength signalStrength){
Log.d(TAG, "Signal Strength changed! New strength = "+signalStrength.getGsmSignalStrength());
}
private void doSomething(ServiceState serviceState){
Log.d(TAG, "Service State changed! New state = "+serviceState.getState());
}
@Override
public void onDestroy() {
Log.d(TAG, "Shutting down the IntentService");
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
super.onDestroy();
}
}
但是,我看到在收到第一个信号强度更改通知后,onDestroy()调用了(大概是IntentService调用stopSelf())。
这个问题不仅限于PhoneStateListener。我有另一个使用接近传感器的简单应用程序:
@Override
protected void onHandleIntent(Intent intent){
mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
}
在这种情况下,也只通知了第一个接近度变化,之后它Service自己停止了。
那么,在 a 中注册这样的听众的模式是Service什么?