MediaRecorder静态对象在onReceive中变为null

时间:2017-05-23 21:13:14

标签: android broadcastreceiver static-variables

我有一个BroadcastReceiver用于接收呼叫状态和记录呼叫。

public class CallBroadcastReceiver extends BroadcastReceiver {
    private static MediaRecorder recorder;

    ...
}

问题是当呼叫花费很长时间时,recorder object变为空。

我知道android操作系统会在一段时间后杀死应用程序的进程并清除内存中的静态变量以释放设备的RAM。

很明显,我无法使用PreferencesDatabase来保存recorder object

那么如何解决我的问题?

注意:我在android 6

中遇到此问题

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

我有一个Service启动BroadcastReceiver class和一个注册接收器的方法:

public class TService extends Service {
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {

          ...

          br_call = new CallBroadcastReceiver();
          this.registerReceiver(br_call, filter);

          //****** THE SOLUTION IS HERE *******
          return START_STICKY;
     }
}

我将return START_NO_STICKY;替换为return START_STICKY;,以便receiver's variables在通话期间粘在内存中,然后recorder object永远不会变为null