首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getApplicationContext()与AppWidgetProvider

getApplicationContext()与AppWidgetProvider
EN

Stack Overflow用户
提问于 2014-03-25 21:38:38
回答 1查看 3.2K关注 0票数 1

我正在尝试将我的Widget连接到应用程序的数据库,但我什么也不明白。

为什么这样做:

代码语言:javascript
复制
import android.app.Activity;
public class Widgets1 extends Activity{
mMioDbHelper = new SqlHelper(getApplicationContext());

这不是吗?

代码语言:javascript
复制
import android.appwidget.AppWidgetProvider;
public class Widgets1 extends AppWidgetProvider{
mMioDbHelper = new SqlHelper(getApplicationContext());

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 22:32:33

AppWidgetProvider扩展了BroadcastReceiver,而BroadcastReceiver又没有继承ContextgetApplicationContext()Context上的一种方法。正如您所确定的,将Context传递给onReceive() of a BroadcastReceiver (以及onUpdate()AppWidgetProvider上的其他回调)的原因是,您可以执行需要Context的事情。

尽管如此,这里的代码有问题:

  1. 不要使用从初始化器中继承的Context方法,就像您对Activity代码片段所做的那样。不能保证这些方法在那个时候就可以使用了。使用Context方法将延迟到组件的初始入口点,例如onCreate()Activity
  2. 不要在主应用程序线程上执行数据库I/O操作,因为如果您的某个活动恰好位于前台,它将冻结您的应用程序的UI。对AppWidgetProvider的所有回调(如onUpdate() )都在主应用程序线程上调用。请使用IntentService或其他可以安全运行后台线程的内容。请注意,IntentService完全能够通过AppWidgetManager更新应用程序小部件UI。onUpdate()是你做某些工作的诱因,但是这项工作可以--而且经常是应该--在其他地方完成。
  3. 在创建各种SQLiteOpenHelper实例时要非常小心,我假设SqlHelperSQLiteOpenHelper的一个子类。请为整个应用程序提供确切的SQLiteOpenHelper实例,以便可以利用SQLiteOpenHelper中内置的线程安全。通常情况下,它最终会成为一个单身的SQLiteOpenHelper。拥有多个实例可能会使您陷入与线程相关的麻烦。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22646857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档