2017-09-24 106 views
1

在过去,我已将子类Application维护为应用程序的活动数据库连接。但是,根据this SO answerApplication在UI线程中运行,这让我觉得我绝对不应该用它来访问数据库。此外,根据Xamarin Application docs(以及那些Android本身):如何避免继承Android.App.Application

通常不需要继承应用程序。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单身人士需要一个全局上下文(例如注册广播接收者),那么检索它的函数可以给出Context,它在第一次构建单身时内部使用Context.ApplicationContext

我想我明白了Context要的东西我可以用它来保持某种静态访问应用程序资源,但也有在文档中没有例子,我以前没遇到过这种情况。任何人都可以解释上述说明,并说明他们如何使用Context来维护应用程序资源(除非我完全忽略了这一点)?链接或直接示例将不胜感激。

回答

-1

我相信我找到了我正在寻找的机器人答案。

戴维·史密斯提供作为文档中引用的“静态单”的simple example上面指出:

public class CustomManager { 
    private static CustomManager sInstance; 

    public static CustomManager getInstance(Context context) { 
     if (sInstance == null) { 
      //Always pass in the Application Context 
      sInstance = new CustomManager(context.getApplicationContext()); 
     } 

     return sInstance; 
    } 

    private Context mContext; 

    private CustomManager(Context context) { 
     mContext = context; 
    } 
} 

Context本身不会有助于CustomManager的寿命 - 仅仅是因为它的存在一个静态单例本身的本质。如context.getApplicationContext()(Xamarin Context.ApplicationContext)所提供的Context仅仅是访问应用程序Context的手段,如果单例需要它。

话虽这么说,通过this SO question and its top two answers所阐述的,真正的问题是没有这么多如果,但是你要如何全局应用程序数据是一个单 - 的框架提供的Application单的扩展,或者作为另外,您创建的独立单身人士可能会或可能不会使用前者。

就我而言,我认为我很满足于简单地继承Application。在Application类的某些变体中存储应用程序数据更直观。此外,我一般都会对OOP的某些问题感到担心,所以我觉得使用已有的东西比自己创建单身更安全。这个单例是由框架管理的,所以虽然这不能保证从本质上归结为全局变量(boo hiss)的典型困境中获得安全性,但至少它比我自己的更安全一些。

P.S. - re:使用在UI线程中运行的Application,看起来使用静态单例对我没有任何额外的好处 - 再一次,因为它们全部使用Application。我想我可能会遵循here提供的建议,并使用AsyncTask来处理大量操作。