为什么Android OS停止了android服务?

问题描述 投票:0回答:1

[确定,这是我的代码,即使关闭应用程序,我也试图创建正在运行的服务。

在主要活动中,我创建了一个新按钮,并调用startMyService()以启动服务,如下所示:

public void startMyService(View view) {
    Intent intent = new Intent(MainActivity.this, MyService.class);
    startService(intent);
}

Service类很简单:

public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("MyService", "service is running");
        final Uri uri = Settings.System.DEFAULT_RINGTONE_URI;
        final Context x =(Context) MyService.this;

        new Thread(new Runnable() {
            @Override
            public void run() {
                MediaPlayer player = MediaPlayer.create(x,uri);
                player.setLooping(true);
                player.start();
            }
        }).start(); 
            Toast.makeText(getApplicationContext(), "Service is running", Toast.LENGTH_LONG).show();

        return START_STICKY;
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        Log.e("MyService", "service done");
    }
}

当然,我已将服务添加到清单中

<service android:name=".MyService" android:exported="false" android:description="@string/service_description" />

现在运行后,我按下了按钮以启动服务,然后关闭该活动,我认为音乐将在后台播放,但是在关闭该活动之后它就停止了。

如何解决此问题?如何使服务仍然运行,以及如何在Android OS销毁服务后使其再次运行?

我知道关于android服务和START_STICKY的话题太多了>

但是,如您所见,这在上面的代码中不起作用,为什么?

注意:这不是在后台播放音乐,我之所以使用播放音乐,是因为这是了解何时停止服务的最简单方法,例如,这是关于如何使服务保持在后台运行的功能,例如,以执行某些任务,例如跟踪服务器中的数据更改。

[确定,这是我的代码,即使关闭应用程序,我也试图创建正在运行的服务。在主要活动中,我创建了一个新按钮并调用startMyService()以启动服务,如下所示:...

android android-service android-background android-app
1个回答
0
投票

当您的应用程序来自android O时,这是正常行为,如果您想保留Service,则应将startForgroundServiceNotification结合使用。阅读here

© www.soinside.com 2019 - 2024. All rights reserved.