2017-04-05 42 views
0

对于编程世界来说,我还是比较新的,所以我希望这不是一个明显/抽象的问题。从库中监控android生命周期事件

我正在开发一个需要监视正在使用它的活动的生命周期事件的android库。在为使用我的库的开发人员创建最少工作量时,如何完成此操作?优选地,我喜欢使用已经内置于Android的内容。

我见过类似的问题,例如:Automatically log Android lifecycle events using ActivityLifecycleCallbacks? 但它并不真正适用于图书馆项目。

我错过了什么吗?任何有识之士将不胜感激。

+0

对你为什么需要这样做感兴趣。最初,它似乎有点粗略,容易发生内存泄漏。 –

+0

@Charles Durham我的库允许客户端只有在登录到我们的服务器后才能使用某些功能。当应用程序发送到后台时,这些功能将被禁用,直到他们再次登录。监控客户端应用程序的生命周期事件似乎是我唯一的选择,但如果您有其他方法,我将非常感谢您的建议。 – deMouser

回答

0

我认为你最好的(长期)选择是随着图书馆的整合(即通过Application在图书馆的入口点)进行设置。

这就是说,有一种无证的方式来获取当前Application。如下所述:https://stackoverflow.com/a/12495865/458365

try { 
    final Class<?> activityThreadClass = 
     Class.forName("android.app.ActivityThread"); 
    final Method method = 
    activityThreadClass.getMethod("currentApplication"); 
    return (Application) method.invoke(null, (Object[]) null); 
} catch (final Exception e) { 
    // handle exception 
} 

一旦你有,你可以调用Application.registerActivityLifecycleCallbacks()注册自己的ActivityLifecycleCallbacks

更新: 另一种方法来获取应用程序(上下文),我已经遇到的使用内容提供者。我认为Firebase这样的库使用这种方法,因为它的设置为零。但是,它需要图书馆的消费者有一个应用对象(实际上是相同的,通过手动的方法),但它看起来的确有很多清洁:

CP的onCreate内部,我们可以投getContextApplication并从那里进入Callbacks进程。

来源:https://medium.com/@andretietz/auto-initialize-your-android-library-2349daf06920