Dmi*_*iev 1 service android xamarin jobservice android-8.1-oreo
在我的 android 应用程序中,我有一个Service在应用程序进入后台时启动的应用程序。OnStartCommand开始分析和检查设备和应用程序状态的长时间运行的任务。
现在,我正在为 Android O 准备应用程序。我面临的第一个问题是Services,我将它们重新编写为JobServices.
现在我面临另一个问题。当用户从应用程序堆栈JobService.OnTaskRemoved中删除我的应用程序时不会被调用。
之前,当我使用Service调用时Service.OnTaskRemoved对我来说工作正常。
现在我看到了唯一的方法。我需要我的旧Service用于处理Service.OnTaskRemoved和新的JobServices用于执行任务。
我错了吗?也许有人可以给我很好的建议?
您正在实施错误的概念..,这会产生问题..,要解决它..您再次实施错误的事情..请卸载所有...
在我的 android 应用程序中,我有一个服务,当应用程序进入后台时启动..
每当第一次打开应用程序时,都可以启动相同的服务...获得所有运行时权限。作为 :
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
context.startForegroundService(new Intent(context, YourLongRunningService.class));
}
else
{
context.startService(new Intent(context, YourLongRunningService.class));
}
Run Code Online (Sandbox Code Playgroud)
OnStartCommand开始分析和检查设备和应用程序状态的长时间运行的任务。
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d("RUNNER : ", "\nPERFORMING....");
return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
上面的单行告诉 android 一直保持活动状态,直到开发人员通过代码自行停止甚至从background或从 中删除recents;它由android os自动重新创建
那我应该在哪里写代码....??
等等......现在编码还为时过早......!!!耐心
开始分析和检查设备和应用程序状态的长时间运行的任务
你的问题不清楚,在我脑子里有一个 gradle 错误...... I can not resolve your symbols:
但我知道这些你的广播肯定是..而且你需要实现广播接收器......才能接收它......!!
我将实现广播接收器......太容易了......
等等...... Android O 不允许你像我们一样从静态接收器实现许多广播接收器......甚至我们也不允许从 manifest.xml 中调用特定意图操作的接收器
在上面创建的服务YourLongRunningService中实现运行时接收器,onCreate例如:
IntentFilter myFilter = new IntentFilter();
myFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(mCallBroadcastReceiver, CallFilter);
Run Code Online (Sandbox Code Playgroud)
CONNECTIVITY_CHANGE 就是一个例子,这将是您想要收听的意图操作/广播......!!
什么是
mCallBroadcastReceiver和所有...
这些是接收器的运行时注册......并且需要从onDestroylike取消注册:
@Override
public void onDestroy()
{
this.unregisterReceiver(mCallBroadcastReceiver);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
不......不......不......我不想取消注册......我希望它始终有效......
我们的服务是START_STICKY即使它被破坏了;得到自动启动,并登记mCallBroadcastReceiver在onCreate再次..
那么接收器在哪里......?
在这种情况下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
}
Run Code Online (Sandbox Code Playgroud)
通知管理器在这里做什么....???
在 O 及以上,你不能在没有适当Ongoing任务通知的情况下运行前台服务......它将进入你的onCreate它将调用 Startforeground 并通知启动此服务作为前台服务
什么低于android O...?
它也可以在 Android O 下运行......只需使用正常的 startservice 调用它在开始时给出的代码......!
那么我长时间运行的代码在哪里......?
从接收器接收你想要的广播并开始一个intentservice或一个job或一个警报类或任何你想要的......
我将创建一个简单的类,它接受
context构造函数并定义一个名为LongRunningCode可能是一千万行代码的公共方法......并且在接收器中接收广播时,我将通过传递context接收器来创建该类的对象,并且将简单地LongRunningCode用那个调用方法object
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
6255 次 |
| 最近记录: |