【问题标题】:Android Service stops after some time [closed]Android服务在一段时间后停止[关闭]
【发布时间】:2021-01-03 13:51:12
【问题描述】:

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

如何始终运行服务?新的 API 也支持它..

【问题讨论】:

    标签: java android github android-service android-fragmentactivity


    【解决方案1】:

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

    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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多