gpt4 book ai didi

java - getApplicationContext() 与 AppWidgetProvider

转载 作者:行者123 更新时间:2023-11-29 07:49:10 25 4
gpt4 key购买 nike

我正在尝试将我的 Widget 连接到应用程序的数据库,但我什么都不懂。
为什么这有效:

import android.app.Activity;
public class Widgets1 extends Activity{
mMioDbHelper = new SqlHelper(getApplicationContext());

这不是吗?

import android.appwidget.AppWidgetProvider;
public class Widgets1 extends AppWidgetProvider{
mMioDbHelper = new SqlHelper(getApplicationContext());

如何将小部件连接到数据库?我的意思是如何从小部件类进行查询?

谢谢。

最佳答案

AppWidgetProvider 扩展了 BroadcastReceiver,后者又不继承自 ContextgetApplicationContext()Context 上的一个方法。正如您所确定的,将 Context 传递给 BroadcastReceiveronReceive() 的原因(和 onUpdate()AppWidgetProvider 上的其他回调)是为了让您可以执行需要 Context 的操作。

综上所述,您这里的代码有问题:

  1. 不要像在 Activity fragment 中那样使用从初始化程序中继承自 Context 的方法。不能保证这些方法在那个时间点可以使用。使用 Context 方法延迟到组件的初始入口点,例如 ActivityonCreate()

  2. 切勿在主应用程序线程上执行数据库 I/O,因为如果您的某个 Activity 恰好在前台运行,它会卡住应用程序的 UI。 AppWidgetProvider 的所有回调,如 onUpdate(),都在主应用程序线程上调用。请使用 IntentService 或其他可以安全运行后台线程的东西。请注意,IntentService 完全能够通过 AppWidgetManager 更新应用小部件 UI。 onUpdate() 是您执行某些工作的触发器,但该工作可以——而且通常应该——在其他地方完成。

  3. 在创建各种 SQLiteOpenHelper 实例时要非常小心,我假设 SqlHelperSQLiteOpenHelper 的子类。请为您的整个应用程序提供 一个 SQLiteOpenHelper 实例,以便您可以利用 SQLiteOpenHelper 中内置的线程安全性。这通常最终成为一个单例 SQLiteOpenHelper。拥有多个实例可能会给您带来与线程相关的麻烦。

关于java - getApplicationContext() 与 AppWidgetProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com