首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >前台服务在1分钟后停止(Android 12)

前台服务在1分钟后停止(Android 12)
EN

Stack Overflow用户
提问于 2022-08-30 18:17:51
回答 2查看 219关注 0票数 1

我试着做一个24小时工作的服务,它一直在工作,直到我更新到Android 12。我已经检查了新的前景限制,但仍然不明白为什么它不工作,因为我是从一个活动开始它。

活动

代码语言:javascript
复制
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class TestActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            startForegroundService(new Intent(TestActivity.this, TestService.class));
    }
}

服务

代码语言:javascript
复制
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.media.MediaBrowserCompat;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.media.MediaBrowserServiceCompat;

import java.util.List;

public class TestService extends MediaBrowserServiceCompat {
    @Override
    public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, @Nullable Bundle rootHints) { return null; }

    @Override
    public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) { result.sendResult(null); }

    @Override
    public int onStartCommand(Intent ii, int flags, int startId) {
        //CREATE NOTI CHANNEL
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    "test", "Test Notifications",
                    NotificationManager.IMPORTANCE_HIGH);
            ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
        }
        //CREATE NOTI
        Notification notification = new NotificationCompat.Builder(this, "test")
                .setSmallIcon(R.drawable.icon)
                .setContentTitle("title")
                .setContentText("test")
                .setChannelId("test")
                .setOngoing(true)
                .setSilent(true)
                .build();
        //START FOREGROUND
        startForeground(101, notification);
        return START_STICKY;
    }
}

我试着用这几行代码创建一个新的应用程序,它工作得很好,所以它一定是其他的东西,使服务在一分钟后关闭。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-30 23:13:29

事实证明,三星让我的应用程序进入深度睡眠状态,如果不使用一分钟,它就会关闭自己。同时也要感谢那些花时间尝试和帮助的人们。

票数 1
EN

Stack Overflow用户

发布于 2022-08-30 21:30:37

尽管您在这里需要前台服务是正确的,但似乎您希望它在后台的任何时候都能保持活力,或者根本不运行,因为您不打算让您的应用程序24/7运行,是吗?

由于您似乎试图在示例中使用MediaBrowserServiceCompat,因此我建议您使用MediaSessionCompat的配套实例,以便让媒体会话独立控制服务的生命周期。

在安卓系统中,实现媒体服务并不是最简单的任务;他们仍在试图解决最新发布的安卓13的一些主要问题。因此,如果你试图创建一个带有媒体前台服务的音频应用程序,我也建议你遵循这是官方的Android指南

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73546895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档