我正在尝试将我的第一个Android库作为练习。这是Google Cloud Messaging
假设此代码在Android应用程序中的任何位置调用:
GCMLib.initialize(this);
此方法接受Context作为参数。稍后,Library会在Push
(在Manifest中引入)中收到一个新BroadcastReceiver
,我正在尝试在那里创建Notification
,并使用{{{}检索目标应用程序的Icon和AppName字符串1}}。
到目前为止,我在静态助手类中持有对Context
对象的引用:
Context
Android库项目的标准模式是什么?
答案 0 :(得分:1)
如果Context不需要绘制UI等,也就是应用程序上下文就足够了,你可以这样做:
public class MyApplication extends Application
{
private MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
this.instance = this;
}
public MyApplication getApplication() {
return instance;
}
}
现在,您可以为有效的上下文调用MyApplication.getApplication()
。这不会导致泄漏,因为Application是Singleton(只存在一个Application实例)。
要使用自定义Application对象,您需要更新清单,请参阅此链接以获取示例:http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/
答案 1 :(得分:0)
从应用程序扩展Context不是一个好主意。不确定上下文不是空的。如果您有服务,则应该/可能想要使用服务上下文。的意思是:
onStartCommand() {
if (aSingleTonObject.getContext() == null) {
this.aSingleTonObject.setContext(this);
}
return START_STICKY;
}
public class aSingleTonClass {
private static Context context = null;
public static getContext() {
if (this.context == null) {
//assure that the service is still running and run it if not
startService(...);
}
}
}
在extends类中保留引用绝不是一个好主意。如果你想要延迟加载,请创建自己的工厂。