我们目前正在开发一款适用于健身追踪应用的Android应用.它在后台不断运行,并且在大多数设备上运行良好,但我们一直在使应用程序在某些三星设备上完全死机.经过一番调查,似乎有些三星设备有一个完全自定义的"应用优化"功能(http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html),基本上是Doze功能的(非常)原始版本,存在于Android的更高版本中,如果它们三天没有被使用,它们基本上只是谋杀应用程序.
由于此应用程序或多或少仅执行日志记录,并且未打开活动,因此对我们来说存在很大问题,因为此功能已在许多三星设备上预先启用.通过使用前台服务解决了这个问题,但这是一个解决方案的大锤,需要通过持续通知来扰乱用户,而且我们真的不需要应用程序处于前台 - 我们对正常的电源没问题管理Android.
三星应用程序优化功能明确指出,如果应用程序未使用三天,它将"优化"应用程序.有没有人了解三星认为"被使用"的东西,我能以某种方式触发吗?
侧面咆哮:在我看来,这是一个糟糕的实现功能,使Android上的开发更具敌意.除了我们的用例,它将会破坏任何信使应用程序.如果不是因为Facebook Messenger和Whatsapp很难被豁免应用,那么用户就会疯狂,因为这会破坏他们的体验.
android android-service android-alarms android-wake-lock samsung-touchwiz
在Java客户端(http://kafka.apache.org/documentation.html#highlevelconsumerapi)中,是否在高级使用者块上进行commitOffsets,直到成功提交偏移量,或者它是否为"即发即忘"?
我正在尝试将客户端重构为XMLHttpRequest的旧后端,而不是使用Fetch API,我很难弄清楚下面代码中xhr.send(文件)的Fetch API等价物.
input.addEventListener('change', function(event) {
var file = event.target.files[0];
var url = 'https://somedomain.com/someendpoint';
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'image/jpeg');
xhr.send(file);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用GCM网络管理器将日志发送到后端服务.我们每隔一小时运行一次警报,创建一个OneoffTask,在执行时,将使用日志消息调用后端服务.
这很有效,但是大量的任务都丢失了(超过一半).起初,我认为它与我们的后端或网络有关,但是在添加了大量的文件记录之后,事实证明服务中的onRunTask从未被触发用于这些任务(但它们肯定会被安排.为什么这些丢失了吗?我误解了API,还是OneoffTasks根本不可靠?
这就是OneoffTask的安排方式:
GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)
// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())
// Persist to disk, even across boots:
.setPersisted(true)
// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest …
Run Code Online (Sandbox Code Playgroud) android android-service google-cloud-messaging gcm-network-manager gcmtaskservice
我正在考虑实现Android 4.4(http://youtu.be/yv9jskPvLUc)中引入的步进传感器API .但是,我无法找到明确解释在后台监控此功能的建议方法是什么?似乎大多数示例仅显示在应用程序运行时如何使用活动执行此操作.我并不特别需要高频率的更新 - 我基本上想要记录用户每小时走到后端服务的步数.我应该在SensorManager上启动一个调用registerListener的后台服务,还是有更优雅的方式?
我有一些后处理,只要从后端更新HTML元素列表,我就必须这样做.是否有一些事件(比如onRender)我可以在模板上听一下以方便这个?
我有一个错误,我在更新后得到重复的意图.我所做的更改是开始收听MY_PACKAGE_REPLACED,并重新注册下面的警报,因为我认为在更新应用程序时警报被终止.但是,我确实得到了下面代码中定义的"TriggerPulse"广播的重复.
以下代码是设置警报的唯一代码.但是,它是从多个地方调用的,但就我从文档中收集而言,此代码应该是幂等的(IntentRequestCodes.PULSE_SERVICE是一个设置为1的静态整数).我认为这段代码是幂等的,这是正确的吗?
final Context applicationContext = context.getApplicationContext();
Intent intent = new Intent("TriggerPulse");
final int flags = 0;
PendingIntent pendingIntent =
PendingIntent.getBroadcast(applicationContext, IntentRequestCodes.PULSE_SERVICE, intent, flags);
AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.ALARM_SERVICE);
final int triggerAtMilliseconds = 0; // run first time immediately
alarmMgr.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerAtMilliseconds,
AlarmManager.INTERVAL_HALF_HOUR,
pendingIntent
Run Code Online (Sandbox Code Playgroud)
如果在正常情况下它是幂等的,这是否意味着更新的应用程序正在创建的pendingIntent根本不被认为是旧遗留应用程序正在创建的pendingIntent的匹配,导致警报仍然被重新安排?如果是这样,我可以轻松地解决问题,而不是在MY_PACKAGE_REPLACED上重新创建警报.但是,有多个资源表明需要在该事件上重新注册这些资源,这导致相信在某些时候Android可能就是这种情况.如果是这样,是否有一个截止的Android版本,这种行为被改变了?
android android-intent android-alarms android-pendingintent android-broadcast
使用...切换gcloud项目后
gcloud init
Run Code Online (Sandbox Code Playgroud)
...然后尝试做一些kubectl命令,例如:
kubectl get rc
Run Code Online (Sandbox Code Playgroud)
...我收到此错误:
error: couldn't read version from server: Get
https://130.211.59.254/api: x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)
为什么这样,我该如何解决?
我正在使用slf4android(https://github.com/bright/slf4android)编写日志,但是如何阅读它们并不明显(理想情况下我只想将它们下载到我的计算机上).其他应用无法访问该应用的内部存储空间.我可以配置slf4android来登录共享目录吗?我试过这个,但我得到了通知:
FileLogHandlerConfiguration fileHandler = LoggerConfiguration.fileLogHandler(this);
File lol = this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
fileHandler.setFullFilePathPattern(fileHandler.toString() + "/my_log.%g.%u.log");
LoggerConfiguration.configuration().addHandlerToRootLogger(fileHandler);
Run Code Online (Sandbox Code Playgroud) 我试图围绕GcmNetworkManager工具中的setTag和OneoffTask的setUpdateCurrent的行为.
setUpdateCurrent的文档说明了这一点:
可选的setter,用于指定此任务是否应覆盖具有相同标记的任何预先存在的任务.默认为false,这意味着新任务不会覆盖现有任务.
很公平,但它并没有说明任务会发生什么,它只说一件事不会发生 - 即任务不会被覆盖.:)我不清楚是否使用setUpdateCurrent意味着允许重复任务意味着它们被丢弃?
为了清楚起见,我的问题是:假设您使用了setUpdateCurrent(false),当您创建一个OneoffTask,其标签与已经安排的另一个OneoffTask相同时,除了已经安排的任务之外,新任务是否仍会发生,或者新任务是否会被抛弃,被视为重复?
android android-service google-cloud-messaging android-jobscheduler
我正在构建一个健身应用程序,它不断记录设备上的活动.我需要经常登录,但我也不想不必要地耗尽我的用户电池,这就是为什么我在考虑将网络呼叫一起批处理并在无线电处于活动状态时立即将它们全部发送,设备是连接到WiFi或正在充电.
我正在使用基于文件系统的方法来实现它.我首先坚持数据File
- 最终我可能会使用Tape from Square来做到这一点 - 但这是我遇到第一个问题的地方.
我不断写新的日志数据File
,但我还需要定期将所有记录的数据发送到我的后端.当发生这种情况时,我删除了内容File
.现在的问题是如何防止这两种操作同时发生?当然,如果我尝试将日志数据写入到File
其他进程正在读取File
并尝试删除其内容的同时,它将导致问题.
我正在考虑使用一个IntentService
基本上充当所有这些操作的队列.从那以后 - 至少我已经阅读了 - 在单个工作程序中按顺序执行IntentServices
句柄,这些操作中的两个操作不应该同时发生,对吧?Intent
Thread
目前我想安排一个PeriodicTask
将GcmNetworkManager
负责将数据发送到服务器.有没有更好的方法来做这一切?
可以将给定分区中的消息划分为多个线程吗?假设我有一个分区,每个进程有一百个进程,每个进程有一百个线程-我的单个分区中的消息是否仅提供给这10000个线程中的一个?
android ×7
apache-kafka ×2
javascript ×2
meteor ×2
ajax ×1
dom ×1
fetch-api ×1
html5 ×1
java ×1
kubernetes ×1
logging ×1
slf4android ×1
slf4j ×1
square-tape ×1