OnTaskRemoved in Android O



在我的安卓应用程序中,我有一个Service,当应用程序进入后台时启动。OnStartCommand开始长时间运行的任务,该任务分析和检查设备和应用状态。

现在,我正在为Android O准备应用程序。我面临的第一个问题是Services,我将它们重新设计以JobServices

现在我面临另一个问题。当用户从应用程序堆栈中删除我的应用时,JobService.OnTaskRemoved不会被调用。

以前,当我使用ServiceService.OnTaskRemoved的召唤对我来说效果很好。

现在我只看到了办法。我需要我的旧Service来处理Service.OnTaskRemoved和新JobServices来执行任务。

我错了吗?也许有人可以给我好的建议?

你正在实现错误的概念..,这会产生问题..,为了解决它..你又在实现错误的事情..请卸载所有...

在我的安卓应用程序中,我有一个服务,当应用程序进入后台时启动。

问题 ;

  1. 在android O中,根本不允许后台执行。即使是一行代码也不能保证执行..!!
  2. 并且您希望它执行长时间运行的服务..!!

解决方案;

每当第一次打开应用程序时,都可以启动相同的服务...获取所有运行时权限时。如:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
context.startForegroundService(new Intent(context, YourLongRunningService.class));
}
else
{
context.startService(new Intent(context, YourLongRunningService.class));
}

OnStartCommand开始长时间运行的任务,该任务分析和检查设备和应用状态。

问题 ;

  1. OnStartCommand并不意味着对长时间运行的过程/代码语句进行编码。
  2. 它根本不是要编码的......

解决方案;

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d("RUNNER : ", "nPERFORMING....");
return START_STICKY;
}

上面的一行告诉 android 一直保持活动状态,直到开发人员通过代码停止自己停止它甚至从backgroundrecents中删除;它由安卓操作系统自动重新创建

那我应该在哪里写代码...??

等。。。现在编码还为时过早....!!耐心

开始长时间运行的任务,用于分析和检查设备和应用状态

你的问题不清楚,在我的大脑中有一个gradle错误......I can not resolve your symbols

  1. 分析
  2. 检查设备
  3. 应用状态

但我知道这些你的广播肯定..而且您需要实现广播接收器...接收它...!!

我将实现广播接收器...太容易了...

问题 ;

等。。。Android O 不允许你像我们一样从静态接收器实现许多广播接收器......甚至我们不允许从清单中调用特定意图操作的接收者.xml

解决方案;

在上面创建的服务YourLongRunningService中实现运行时接收器,onCreate如下所示:

IntentFilter myFilter = new IntentFilter();
myFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(mCallBroadcastReceiver, CallFilter);

CONNECTIVITY_CHANGE是一个例子,这将是您想要收听的意图动作/广播...!!

什么是mCallBroadcastReceiver和所有...

这些是接收器的运行时注册...并且需要从以下onDestroy取消注册:

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

不。。。。不。。。不。。。。我不想取消注册它...我希望它始终有效..

我们的服务是START_STICKY即使它被销毁;自动启动并再次在onCreate中注册mCallBroadcastReceiver

那么接收器在哪里....???

在这种情况下mCallBroadcastReceiver接收器是在类区域中定义的,我们在其中声明变量和常量:

public class YourLongRunningService extends Service
{
NotificationManager mNotifyManager;
NotificationCompat.Builder mBuilder;
NotificationChannel notificationChannel;
String NOTIFICATION_CHANNEL_ID = "1";
private BroadcastReceiver mCallBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// All your receiver code goes here...
}
};
// your constructor
// your onStartcommand
// your ondestroy
}

通知管理器在这里做什么....???

在 O 及以上 O 中,如果没有适当的Ongoing任务通知,您将无法运行前台服务...它将进入您的onCreate它将调用 Startforeground 并通知将此服务作为前台服务启动

什么下面安卓O...?

它也可以在安卓O下面工作...只需使用正常的启动服务调用它在非常启动时给出的代码...!!

那么我长时间运行的代码去哪儿了..???

从接收器接收您想要的广播,并开始intentservicejob或警报类或任何您想要的东西......

我将创建一个简单的类,该类在构造函数中接受context并定义一个名为LongRunningCode可能是一亿行代码的公共方法。 在接收器中接收广播时,我将通过传递接收器context来创建一个此类的对象,并将使用该object简单地调用LongRunningCode方法

希望对你有帮助

相关内容

  • 没有找到相关文章

最新更新