即使在startForground中音乐服务也被杀死了

van*_*dzi 5 android android-service android-music-player

是否有可能阻止服务(startForground)被os杀死?我用它来播放音频,但是当我使用另一个需要更多资源(愤怒的小鸟去)的应用程序时它会被杀死.在日志中,我看到应用程序进程被ActivityManager杀死.我还复制了其他一些音频应用程序.只有未被杀的应用程序才是Play Music应用程序.它被复制在三星s3 android 4.3上.

dan*_*117 5

是否有可能阻止服务(startForground)被os杀死?

不,这是Android决定哪个进程必须停止的时候.唯一的方法是通过减少消耗的内存量使其"不再被吸引".

节省内存.将服务放入自己非常小的过程中.所以android os可以杀死主进程来回收内存,你的服务可以继续运行.通过传入用于启动服务的意图的设置和首选项来维护一个很小的服务代码.

注意:小服务必须是前台服务,这意味着它必须在状态栏中显示一个图标.

表明单独的过程

        <service
        android:name="com.gosylvester.bestrides.ServiceLocationRecorder"
         android:process=":bestRidesService" >
    </service>
</application>
Run Code Online (Sandbox Code Playgroud)

传递具有用于启动服务的意图的设置.只需重新启动服务即可更改设置.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    boolean isTrackerMarker = SettingMarker.TRACKER_MARKER_DEFAULT;
    if (intent != null) {
        // intent is processing = b
        isMiles = intent.getBooleanExtra(
                SettingApplication.APPLICATION_MILE,
                SettingApplication.APPLICATION_MILE_DEFAULT);
        isRecordAccuracy = intent.getBooleanExtra(
                SettingRecord.RECORD_ACCURACY,
                SettingRecord.RECORD_ACCURACY_DEFAULT);
        locationInterval = intent.getLongExtra(SettingRecord.RECORD_MIlLIS,
                SettingRecord.RECORD_PRESET_MEDIUM_MILLIS);
        startMillis = intent.getLongExtra(BUNDLE_START_MILLIS, 0);
        distance = intent.getDoubleExtra(
                ServiceLocationRecorder.BUNDLE_TRACKED_DISTANCE, 0);
        recordDistance = (float) intent.getIntExtra(
                SettingRecord.RECORD_DISTANCE,
                SettingRecord.RECORD_PRESET_MEDIUM_DISTANCE);
        boolean newIsRecording = intent.getBooleanExtra(
                SettingRecord.RECORDING, isRecording);

        isTrackerMarker = intent.getBooleanExtra(
                SettingMarker.TRACKER_MARKER,
                SettingMarker.TRACKER_MARKER_DEFAULT);
        startRecording(newIsRecording);
    }
Run Code Online (Sandbox Code Playgroud)