Android:当我收到来电时,应用/广播接收器有时会被杀死

时间:2015-09-21 15:38:27

标签: android broadcastreceiver

当有来电时,我编写了一个拦截器来访问呼叫数据。我听取州改变行动,以决定是否是未接来电或已接来电。每当调用结束时,我都会编写代码来执行操作。

public class PhoneStateBroadcastReceiver extends BroadcastReceiver {

  public static final String TAG = "PHONE STATE";
  private static String mLastState = TelephonyManager.CALL_STATE_IDLE;

  @Override
  public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if (!state.equals(mLastState)) {
      mLastState = state;
      Log.e(TAG, state);  
      return;
    }
    //Code to do stuff based on last state and state
  }  
}

代码工作正常。但我注意到我的应用程序未能处理一些调用。由于这个问题难以重现,我根据我的通话活动监控了我的应用一整天。当我调试问题时,我发现mLastState在这种情况下没有改变。如果来电结束应该是IDLERINGING,那么它仍为OFFHOOK。原因是我的应用程序被杀,mLastState正在重新初始化。所以我失去了最后一个状态。

如何处理这种情况?我想到的第一个解决方案是将mLastState保留给共享偏好。还有其他方法可以解决这个问题吗?

0 个答案:

没有答案