用户关闭应用程序后,为什么MediaPlayer仍继续播放?

时间:2018-07-23 13:25:34

标签: android android-service android-mediaplayer

我构建了一个广播应用程序,该广播应用程序借助MediaPlayer播放流中的现场音乐。

当我创建一项服务时,问题开始了,该服务的工作是在用户关闭应用程序时执行代码块(其工作是删除通知)。在此服务中,我使用 startForeground()方法使其成为前景服务,因此只要应用程序运行,它就一直有效(因为如果我不这样做, t,操作系统将在1分钟内将其杀死)。

但是现在的问题是,当用户关闭应用程序时,MediaPlayer会继续播放。在服务中添加 startForeground()方法之前,我的应用没有这种行为。

我不知道这是否会有所帮助,但是当用户关闭音乐后,如果我在onTaskRemoved()方法中添加System.exit(0),并且我收到操作系统的通知,说我应用正在消耗电池。

有人知道为什么我的应用程序具有这种特殊行为吗?为什么不终止申请流程?

public class OnClearFromRecentService extends Service {
    private static final String TAG = "onClearFromRecentServic";
    private NotificationManagerCompat mNotificationManagerCompat;

    @Override
    public void onCreate() {
        super.onCreate();
        mNotificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "Service Started");
        startForeground(2001, new NotificationCompat.Builder(getApplicationContext(), CHANNELID)
    .setContentTitle("title").setContentText("contentText").build());
        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "Service Destroyed");
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        //Put code here which will be executed when app is closed from user.
        Log.d(TAG, "onTaskRemoved was executed ");
        mNotificationManagerCompat.cancelAll();
        stopSelf();
    }

}

Manifest.xml

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nikolouts.kwnstantinos.plutoradio">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"></activity>
        <activity
            android:name=".AboutActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".SplashScreenActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" />

        <receiver android:name=".MainActivity$NotificationReceiver" />

        <activity android:name=".ChatActivity"/>
        <service android:name=".OnClearFromRecentService" android:stopWithTask="false" />

    </application>

</manifest>

1 个答案:

答案 0 :(得分:1)

清单中有“ stopWithTask =“ false”“。当用户从最近任务列表中滑动应用程序时,这告诉Android不要停止您的服务。将此设置为“ true”