Android 中的 OnTaskRemoved O
OnTaskRemoved in Android O
在我的 android 应用程序中,我有一个 Service
当应用程序进入后台时启动。 OnStartCommand
开始分析和检查设备和应用程序状态的长 运行 任务。
现在,我正在为 Android O 准备应用程序。我遇到的第一个问题是 Services
,我将它们修改为 JobServices
。
现在我面临另一个问题。当用户从应用程序堆栈中删除我的应用程序时 JobService.OnTaskRemoved
不会被调用。
之前,当我使用 Service
时,调用 Service.OnTaskRemoved
对我来说效果很好。
现在我看到了唯一的办法。我需要我的旧 Service
来处理 Service.OnTaskRemoved
和新的 JobServices
来执行任务。
我错了吗?有人可以给我好的建议吗?
您正在实施错误的概念..,这会产生问题..,要解决它..您再次实施错误的事情..请卸载所有...
In my android app, I have a Service that starts when the app goes in background..
问题;
- 在androidO中根本不允许后台执行..连一行代码都不能保证执行..!!
- 并且您希望它执行长 运行ning 服务..!!
解决方案;
App第一次打开时可以启动相同的服务...在获取所有运行次权限时。如:
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
begins long running task that analyzes and checks device and app status.
问题;
- OnStartCommand 并不意味着要编写长 运行ning 程序/代码语句..
- 它也不应该被编码......
解决方案;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d("RUNNER : ", "\nPERFORMING....");
return START_STICKY;
}
上面的单行告诉 android 保持活动状态 一直到开发人员通过代码停止自己停止它 甚至从 background
或从recents
;它由 android os
自动重新创建
Then where should i write the code.... ??
等等……现在编码还为时过早……!!!耐心
begins long running task that analyzes and checks device and app status
你的问题不清楚,我脑子里有个gradle错误... I can not resolve your symbols
:
- 分析
- 检查设备
- 应用状态
但我知道这些你的广播肯定..你需要实现广播接收器......才能接收它......!!
I will implement Broadcast receivers... Its too easy...
问题;
等等... Android O 不允许您像我们一样从静态接收器实现许多广播接收器...甚至我们也不允许在来自 manifest.xml
解决方案;
在您上面创建的服务 YourLongRunningService
中 onCreate
中实施 运行 时间接收器,例如:
IntentFilter myFilter = new IntentFilter();
myFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(mCallBroadcastReceiver, CallFilter);
CONNECTIVITY_CHANGE 是一个示例,这将是您想要收听的意图操作/广播...!!
What is mCallBroadcastReceiver
and all...
这些是 运行接收者的时间注册...需要从 onDestroy
取消注册,例如:
@Override
public void onDestroy()
{
this.unregisterReceiver(mCallBroadcastReceiver);
super.onDestroy();
}
No.... No... No.... I do not want to un-register it... I want it always working..
我们的服务是START_STICKY
即使它被破坏了;自动启动并再次在 onCreate
中注册 mCallBroadcastReceiver
..
Where is the receiver then....???
在这种情况下,mCallBroadcastReceiver
是在我们声明变量和常量的 class 区域中定义的接收器:
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
}
What notification Manager is doing here....???
在 O 及更高版本中,如果没有适当的 Ongoing
任务通知,您将无法 运行 前台服务...它将进入您的 onCreate
,它将调用 Startforeground 并通知开始此服务作为前台服务
What below android O...?
它在 Android 以下工作 O 也是...只需使用正常的 startservice 调用它在开始时给出的代码...!!
Where is my long running code goes then....???
从接收器接收您想要的广播并启动 intentservice
或 job
或警报 class 或任何您想要的...
I will make a simple class which takes context
in constructor and defines a public method named LongRunningCode
may be of one crore lines of code....
And on receiving broadcast in receiver , I will make a object of that class by passing context
of receiver and will simply call LongRunningCode
method with that object
希望对您有所帮助
在我的 android 应用程序中,我有一个 Service
当应用程序进入后台时启动。 OnStartCommand
开始分析和检查设备和应用程序状态的长 运行 任务。
现在,我正在为 Android O 准备应用程序。我遇到的第一个问题是 Services
,我将它们修改为 JobServices
。
现在我面临另一个问题。当用户从应用程序堆栈中删除我的应用程序时 JobService.OnTaskRemoved
不会被调用。
之前,当我使用 Service
时,调用 Service.OnTaskRemoved
对我来说效果很好。
现在我看到了唯一的办法。我需要我的旧 Service
来处理 Service.OnTaskRemoved
和新的 JobServices
来执行任务。
我错了吗?有人可以给我好的建议吗?
您正在实施错误的概念..,这会产生问题..,要解决它..您再次实施错误的事情..请卸载所有...
In my android app, I have a Service that starts when the app goes in background..
问题;
- 在androidO中根本不允许后台执行..连一行代码都不能保证执行..!!
- 并且您希望它执行长 运行ning 服务..!!
解决方案;
App第一次打开时可以启动相同的服务...在获取所有运行次权限时。如:
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
begins long running task that analyzes and checks device and app status.
问题;
- OnStartCommand 并不意味着要编写长 运行ning 程序/代码语句..
- 它也不应该被编码......
解决方案;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d("RUNNER : ", "\nPERFORMING....");
return START_STICKY;
}
上面的单行告诉 android 保持活动状态 一直到开发人员通过代码停止自己停止它 甚至从 background
或从recents
;它由 android os
Then where should i write the code.... ??
等等……现在编码还为时过早……!!!耐心
begins long running task that analyzes and checks device and app status
你的问题不清楚,我脑子里有个gradle错误... I can not resolve your symbols
:
- 分析
- 检查设备
- 应用状态
但我知道这些你的广播肯定..你需要实现广播接收器......才能接收它......!!
I will implement Broadcast receivers... Its too easy...
问题;
等等... Android O 不允许您像我们一样从静态接收器实现许多广播接收器...甚至我们也不允许在来自 manifest.xml
解决方案;
在您上面创建的服务 YourLongRunningService
中 onCreate
中实施 运行 时间接收器,例如:
IntentFilter myFilter = new IntentFilter();
myFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(mCallBroadcastReceiver, CallFilter);
CONNECTIVITY_CHANGE 是一个示例,这将是您想要收听的意图操作/广播...!!
What is
mCallBroadcastReceiver
and all...
这些是 运行接收者的时间注册...需要从 onDestroy
取消注册,例如:
@Override
public void onDestroy()
{
this.unregisterReceiver(mCallBroadcastReceiver);
super.onDestroy();
}
No.... No... No.... I do not want to un-register it... I want it always working..
我们的服务是START_STICKY
即使它被破坏了;自动启动并再次在 onCreate
中注册 mCallBroadcastReceiver
..
Where is the receiver then....???
在这种情况下,mCallBroadcastReceiver
是在我们声明变量和常量的 class 区域中定义的接收器:
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
}
What notification Manager is doing here....???
在 O 及更高版本中,如果没有适当的 Ongoing
任务通知,您将无法 运行 前台服务...它将进入您的 onCreate
,它将调用 Startforeground 并通知开始此服务作为前台服务
What below android O...?
它在 Android 以下工作 O 也是...只需使用正常的 startservice 调用它在开始时给出的代码...!!
Where is my long running code goes then....???
从接收器接收您想要的广播并启动 intentservice
或 job
或警报 class 或任何您想要的...
I will make a simple class which takes
context
in constructor and defines a public method namedLongRunningCode
may be of one crore lines of code.... And on receiving broadcast in receiver , I will make a object of that class by passingcontext
of receiver and will simply callLongRunningCode
method with thatobject
希望对您有所帮助