java - Android服务在一段时间后停止
问题描述
我将此代码用作我的项目的示例,以在锁定屏幕上显示片段,但它仅在主要活动未被破坏(未从最近的活动中删除)之前有效,并且有时仅在一段时间内有效,然后停止在屏幕上显示片段。 .
我怎样才能一直运行服务?新的 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));
推荐阅读
- maven - 为什么制作springboot fat jar的mvm包适用于父级但不适用于dependencyManagment
- javascript - 如何将 OrbitControls 应用于从 gltf 文件加载的相机?
- oracle - oracle 中 OBJECT_NAME() 的等价物是什么?
- c# - 如何强制 Serilog 仅记录我的自定义日志消息
- eclipse-mat - 泄漏嫌疑人报告未在 Eclipse MAT 上呈现
- mysql - “on 子句”中的未知列“xxx”
- c++ - 递归函数的return语句之前的cout会停止它吗?
- aspnetboilerplate - 如何记住子菜单的切换状态
- excel - VBA 选项按钮
- php - php exec 尾随命令并保持输出