我试图使用Alarm Manager每隔30分钟在我的应用程序中发出警报,setExactAndAllowWhileIdle
但它无法正常工作!
每当收到报警信号时,我都会通过发出推送通知来测试功能.
问题是:当设备闲置一段时间后进入打盹模式时,我不再收到警报.但是,只要我打开屏幕,我就会收到通知.我的应用程序需要准确的警报,需要每30分钟准确按时交付!由于设备处于打盹模式,它无法接收延迟警报或丢失警报!
我在我的代码中使用了以下内容:
onReceive()
方法中,我设置下一个警报.我也是,启动一个只发出推送通知的startWakefulService,然后自行停止.笔记:
android.permission.WAKE_LOCK
setAlarmClock()
它甚至在打盹模式下一直工作,每50个警报一个丢弃/延迟警报.所以,它也不完美.而且我不希望用户一直看到警报图标.PS: 在回答之前,请确保您了解从Android 6.0 M和Doze模式开始施加的限制.
Link1:https://developer.android.com/training/monitoring-device-state/doze-standby.html
总之它说:
现在,为什么我不能每30分钟使用setExactAndAllowWhileIdle()
?获得准确的报警信号?而且,为什么不是setAlarmClock()
100%可靠?!
android android-intent android-alarms android-doze android-7.0-nougat
我阅读了几十个教程和Stackoverflow对我的问题的答案,但没有什么对我有用!此外,他们中的大多数都是旧的,所以OKHTTP可能会以某种方式改变.
我想要的只是为Retrofit 启用离线缓存.
我正在使用GET
我曾尝试仅用offlineCacheInterceptor
作拦截器,但我一直得到:
Unable to resolve host "jsonplaceholder.typicode.com": No address associated with hostname
Run Code Online (Sandbox Code Playgroud)
我尝试使用offlineCacheInterceptor
Interceptor + provideCacheInterceptor()
作为NetworkInterceptor的组合,但我一直得到:
504 Unsatisfiable Request (only-if-cached) and a null response.body()
Run Code Online (Sandbox Code Playgroud)
我甚至确保.removeHeader("Pragma")
到处添加!
我尝试了所有这些链接:
https://newfivefour.com/android-retrofit2-okhttp3-cache-network-request-offline.html (一个拦截器,不工作!!)
https://medium.com/mindorks/caching-with-retrofit-store-responses-offline-71439ed32fda(一个拦截器,不工作!)
https://caster.io/lessons/retrofit-2-offline-cache(单独在线+离线缓存,不工作)
https://www.journaldev.com/23297/android-retrofit-okhttp-offline-caching(不工作,504不满意请求(仅限缓存))
http://mikescamell.com/gotcha-when-offline-caching-with-okhttp3/(一个拦截器,不工作!!)
/sf/answers/3380677821/(不工作)无法解析主机"jsonplaceholder.typicode.com":没有与主机名关联的地址
使用OKHttp进行改造可以在离线时使用缓存数据 (令人困惑!)
这是我的代码:
public static Retrofit getRetrofitInstance(Context context) {
if (retrofit == null) {
c = context;
int cacheSize = 10 * 1024 * 1024; // 10 MB
Cache cache = …
Run Code Online (Sandbox Code Playgroud) 当使用 Livedata 作为 Room 中表上的 select* 查询的返回类型时,然后我观察它,如果我更新/插入/删除该表中的条目,我会得到触发器。然而,当我尝试使用 Kotlin Flow 时,我只得到 2 个触发器。
第一个触发器给出一个空值,因为状态流的初始值为空。第二个触发器是 Room 表中的条目列表。
如果我对数据库执行插入/删除操作,我会收到来自 StateFlow 的触发器。但是,如果我更新条目,Stateflow 不会触发。
注意:更新操作在数据库上正常工作。我使用 DB 检查器进行了检查。
数据类和 DAO
@Entity
data class CartItem (
@PrimaryKey
val itemId: Int,
var itemQuantity: Int=1
)
@Dao
interface CartDao {
@Query("SELECT * FROM CartItem")
fun getAllItems(): Flow<List<CartItem>>
@Update
suspend fun changeQuantityInCart(cartItem:CartItem)
@Insert
suspend fun insert(item: CartItem)
@Delete
suspend fun delete(cartItem:CartItem)
}
Run Code Online (Sandbox Code Playgroud)
视图模型
val cartItems: StateFlow<List<CartItem>?> =
repo.fetchCartItems().stateIn(viewModelScope, SharingStarted.Lazily, null)
Run Code Online (Sandbox Code Playgroud)
分段
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.cartItems.collect {
Log.e("Update","Update")
}
Run Code Online (Sandbox Code Playgroud) 我下面这个关于创建使用TensorFlow精简版上的协同合作模型制作自定义模型教程。
import pathlib
path = pathlib.Path('/content/employee_pics')
count = len(list(path.glob('*/*.jpg')))
count
data = ImageClassifierDataLoader.from_folder(path)
train_data, test_data = data.split(0.5)
Run Code Online (Sandbox Code Playgroud)
我有第 2 步的问题:
model = image_classifier.create(train_data)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:ValueError: Expect x to be a non-empty array or dataset。
难道我做错了什么?不过,示例中提供的数据集运行良好。为什么?
android ×3
android-doze ×1
android-room ×1
caching ×1
google-mlkit ×1
keras ×1
kotlin-flow ×1
okhttp3 ×1
retrofit ×1
retrofit2 ×1
tensorflow ×1
tf.keras ×1