- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近将所有服务替换为前台服务和JobIntentService,因为在oreo及更高版本中存在一些后台执行限制(https://developer.android.com/about/versions/oreo/background)。根据文档,JobIntentService的行为类似于适用于Android 7及更高版本的Intent Service,行为类似于JobScheduler(适用于Android 8及更高版本)。我注意到Google提供的新JobIntentService中存在问题。
Android 8及更高版本:
在Android 8及更高版本中不断发生崩溃。这里有一张票提到了同样的问题https://issuetracker.google.com/issues/63622293,我添加了一些极客建议的临时修复程序。
Android 7及以下版本:
一旦工作完成,充当Intent Service的JobIntentService不会停止。
我已经在服务中实现JobIntentService,只要用户执行某些操作,该服务就会触发。
代码
public class SampleJobIntentService extends FixedJobIntentService {
public static void postData(Context context, String data) {
Intent intent = new Intent(context, SampleJobIntentService.class);
intent.setAction(INITIAL_ACTION);
intent.putExtra(SAMPLE_ID, data);
SampleJobIntentService.enqueueWork(context,intent);
}
public static void enqueueWork(Context context, Intent work) {
SampleJobIntentService.enqueueWork(context, SampleJobIntentService.class, JOB_ID, work);
@Override
protected void onHandleWork(@NonNull Intent intent) {
if (intent != null) {
SampleRequest sampleRequest = requests.get(intent.getAction());
if (sampleRequest != null) {
try {
// perform some networking operations
} catch (Exception ex) {
Log.d("Error for intent ");
}
Log.i("send action ");
} else
Log.e("action not found for ");
}
}
}
public abstract class FixedJobIntentService extends JobIntentService {
@Override
GenericWorkItem dequeueWork() {
try {
return new FixedGenericWorkItem(super.dequeueWork());
} catch (SecurityException ignored) {
doStopCurrentWork();
}
return null;
}
private class FixedGenericWorkItem implements GenericWorkItem {
final GenericWorkItem mGenericWorkItem;
FixedGenericWorkItem(GenericWorkItem genericWorkItem) {
mGenericWorkItem = genericWorkItem;
}
@Override
public Intent getIntent() {
if (mGenericWorkItem != null) {
return mGenericWorkItem.getIntent();
}
return null;
}
@Override
public void complete() {
try {
if (mGenericWorkItem != null) {
mGenericWorkItem.complete();
}
} catch (IllegalArgumentException ignored) {
doStopCurrentWork();
}
}
}
}
最佳答案
Well..., Its a lot big theory...!! It would not be able to put it all here. I will try my best which will make some your concepts clear.
use-less
...与
no proper documentation
和
no proper sample codes for its developers
.. !!所以我在
stack-overflow
的每篇文章中都提到了这一点,因为这将有助于节省其他人的时间。
hints to your posted question
:
YOU :- I have recently replaced all my service to foreground services and JobIntentService
ALL THE TIME RUNNING PROCESS; WHICH WILL NEVER END... ONCE IT IS STARTED
,则将其用于服务中,该服务会从
START_STICKY
返回
OnStartCommand
。还是不建议您使用它,就像您想不惜一切代价实现它一样...然后,您将不得不使用带有
setOngoing(true)
的通知,该通知最终用户将无法永久删除您的通知。 ..
Oreo
以上版本之上,您不能通过在 list 中声明它并仅通过使其成为接收者来使用所有接收者和 Intent Action 。在O之下,并在O之上调用前台服务。现在,您将从该前台服务实现所有对象的运行时接收器,并在Ondestroy方法中注销它。我从未找到用于实现运行时接收器的正式示例代码,最后经过数月的辛苦工作,我终于成功实现了它。是的,由于Google,这不是一项明智的工作
YOU :- I have recently replaced all my service to foreground services and
JobIntentService
BootComplete
退出...同样,如果多次调用
receiver
...由于同一服务线程可以运行多次...再次如果您想要一项服务来做很多工作...请使用
boot_completed
...但还是不建议这样做,我已经建议过,何时在提示1中使用它。
service
如果您一次又一次调用相同的
topSelf()
,则所有调用都将保留在
Services can cause data-loss
中,并在完成
START_STICKY
后执行
property of execution serially only
。如上所述,服务中的情况并非如此。它本身就结束了...不需要由开发人员结束.. !!
intentService
,Android便可以在以后停止调用,而不会在崩溃时通知您。需要使用
queue
到
one by one
处理它们。再次...如果为
one by one
,则为
crashed
try-catch-exception
...
avoid crash
:-
you are implementing threads within services
try-catch-exception
(例如vivo,mi,oppo,one + 3,...)需要will not save your application from being crashing
对其进行更改,并提供诸如FunTouchOs,ColorOs,OxygenOs的名称FireBaseJobScedular
的实例并在其中运行,而且显然非标准公司也不会限制google应用执行其任务。 EVEN ALL THE TIME RUNNING TASK
..,即使我已经在EVEN SUPPORTED BY NON STANDARD COMPANIES
上对其进行了测试,并且在Android 5.0以下版本中都可以作为stock-android
任务运行。 GooglePlyService
,Oreo
,好像万一您要将应用程序上载到Android P
一样,现在是强制性的,并且会听到您的消息。和AlarmManager
。 minsdk above 16
绑定(bind)到 list 中,并使用target sdk 26
的单行许可权google play
和compile sdk 26
上JobService
最小化。 receive_boot_complete
表示任务已完成,它将结束JobService。 cold boot
很好的公司的
hot boot
,并且在许多类型的android手机制造商中都经历过
you can focus on actual tasks
引起的问题...这不是
return false
,所以我们必须经历它。从过去的18年以来一直保持开发人员的身份,我现在也大部分都在编码...在所有开发项目中,其开发策略仅由我自己考虑。
Correct me ... too... As you have not mentioned
what your tasks
andproject
is related to... and what you exactly wants to be done in aforeground service and intent-service
... Let me know..., It would be my pleasure to help you. It is a general theoretical answer rather than what you wants.... But for giving you actual answer i will need exact your project scope..
关于Android Oreo JobIntentService继续在Android 7及以下版本的后台运行,并在Android 8及更高版本中经常崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627968/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!