Android服务会在一段时间后停止

如何解决Android服务会在一段时间后停止

我正在使用this code作为我的项目的示例,以便在锁定屏幕上显示一个片段,但是它只能在主要活动没有被破坏(没有从最近的活动中删除)之前起作用,并且有时只起作用一段时间,然后停止在屏幕上显示片段。

我如何一直运行服务?也有新的API支持它..

解决方法

在清单中初始化服务,您必须在开始按钮中按如下所示调用服务

Intent i = new Intent(this,AnotherService.class);
        i.setAction("C.ACTION_START_SERVICE");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForegroundService(i);
        }
        else
        {
            startService(i);
        }

然后您必须像下面一样启动服务

public class AnotherService extends Service {
static final int NOTIFICATION_ID = 543;
public AnotherService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    super.onCreate();
   if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
        startMyOwnForeground();
    else
        startForeground(1,new Notification());
        
   //your code here
    

   
}

@RequiresApi(Build.VERSION_CODES.O)
private void startMyOwnForeground() {

    String NOTIFICATION_CHANNEL_ID = "example.permanence";
    String channelName = "Background Service";
    NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID,channelName,NotificationManager.IMPORTANCE_NONE);
    chan.setLightColor(Color.BLUE);
    chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);


    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    assert manager != null;
    manager.createNotificationChannel(chan);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL_ID);
    Notification notification = notificationBuilder.setOngoing(true)
            .setContentTitle("App is running in background")
            .setPriority(NotificationManager.IMPORTANCE_MIN)
            .setCategory(Notification.CATEGORY_SERVICE)

            .build();
    startForeground(2,notification);
}

@Override
public int onStartCommand(Intent intent,int flags,int startId) {

    return START_STICKY;
    //return super.onStartCommand(intent,flags,startId);
}


@Override
public void onDestroy() {
    super.onDestroy();
}

如果您已完成服务,则必须在要停止的活动中使用此按钮更改停止按钮代码

stopService(new Intent(YourActivity.this,AnotherService.class));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?