对于想了解c#–在Singleton上使用Dispose来清理资源的读者,本文将提供新的信息,我们将详细介绍c#清楚,并且为您提供关于AndroidSingleTask,SingleTop和HomeB
对于想了解c# – 在Singleton上使用Dispose来清理资源的读者,本文将提供新的信息,我们将详细介绍c#清楚,并且为您提供关于Android SingleTask,SingleTop和Home Button、android – Dagger 2 Singleton vs Real Singleton、android – 何时调用dispose并清除CompositeDisposable、Android-Google在Singleton模式方面的矛盾的有价值信息。
本文目录一览:- c# – 在Singleton上使用Dispose来清理资源(c#清楚)
- Android SingleTask,SingleTop和Home Button
- android – Dagger 2 Singleton vs Real Singleton
- android – 何时调用dispose并清除CompositeDisposable
- Android-Google在Singleton模式方面的矛盾
c# – 在Singleton上使用Dispose来清理资源(c#清楚)
现在我将删除操作由应用程序在关闭时调用的单例的Cleanup()方法处理.当我为Cleanup()编写文档时,让我感到震惊的是我正在描述应该使用dispose()方法来清理资源.我原本没有实现Idisposable因为它在我的单身中看起来不合适,因为我不想要任何东西来处理单身人士本身.目前还没有,但是将来可能会出现这样一个原因,即可能会调用此Cleanup(),但单例仍然需要存在.我想我可以包含GC.SuppressFinalize(this);在dispose方法中使这个可行.
因此,我的问题是多方面的:
1)在单例上实现Idisposable从根本上是一个坏主意吗?
2)我只是通过使用Cleanup()而不是dispose()来混合语义,因为我正在处理资源我真的应该使用dispose吗?
3)将使用GC.SuppressFinalize(this)实现’dispose()’;这样我的单身实际上并没有被破坏,因为我希望它在调用清理数据库后生存.
解决方法
现在将它放入,并在应用程序完成后处理对象,并不一定是坏事.当你打电话时,你必须要小心.如果您真的关心清理并且只有一个引用它,那么您可以将清理代码放在对象终结器~WithClass中,这样它只会被调用.Net确定它不再需要(当应用程序关闭,如果它是一个真正的单身人士).
Am I just mixing semantics here by
having a Cleanup() instead of a
dispose() and since I’m disposing
resources I really should use a
dispose?
是的,这只是语义. dispose是显示在程序完成对象后需要清除的东西的标准.
Will implementing ‘dispose()’ with
GC.SuppressFinalize(this); make it so
my singleton is not actually destroyed
in the case I want it to live after a
call to clean-up the database.
不,这意味着当你调用dispose方法时,垃圾收集器不会调用对象的自定义终结器.
Android SingleTask,SingleTop和Home Button
它调用的活动B也是SingleTask.
当我按下第二个活动中的主页按钮打开另一个应用程序,然后我尝试去我的应用程序mantaining Home按钮按下我总是去主要活动,我想要打开第二个活动维持当时的状态我按下主页按钮.
我已经尝试将第二个活动设置为singletop,但它不起作用.
有帮助吗?
解决方法
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
更糟糕的是官方开发指南中没有关于这个特殊用例的明确解释.与此主题相关的一些部分甚至是自相矛盾的.
尝试在MainActivity A上使用launchMode =“standard”,在Activity B上使用launchMode =“singleTask”,这将给出您描述的期望行为.
android – Dagger 2 Singleton vs Real Singleton
问题是:我应该保留我的旧单身人士吗?或者我应该使用匕首?
解决方法
Dagger creates a new object graph with every new container for each @Singleton object so we have to create the component in the application level
如果您需要应用程序级单例,则需要在应用程序的生命周期中保留相同的组件实例,而不是为每个新的“容器”创建一个新的组件实例.该组件将包含并提供单例,因此您不需要在应用程序中激活多个对象图.如果某个外部创建者(例如Android或servlet引擎)在Dagger之外自己创建对象,这可能意味着您需要将Dagger组件保存在单例持有者(可能是线程安全的公共静态字段)中为你的老单身人士做的;这仍然应该更容易理解和维护,因为您可以通过Dagger提供尽可能多的单例,并且只担心组件本身的一个外部管理单例.
作为替代方案,您可以完全按原样保留旧单例,并在模块中编写@Provides方法,以在Dagger创建的对象请求它们时检索这些单例实例.这样您就可以随时随地创建新的对象图,并且您的单身人士仍将表现为单身人士.不过,我会对此提出警告,因为在这一点上,你的单身人士可以在你的应用程序中以两种不同的方式访问,只有那些由Dagger创建或Dagger管理的人才会在测试中被轻易覆盖;这可能令人困惑,难以管理.
android – 何时调用dispose并清除CompositeDisposable
我的问题可能是How to use CompositeDisposable of RxJava 2?的重复但要求澄清一个疑问.
根据接受的答案
// Using clear will clear all, but can accept new disposable
disposables.clear();
// Using dispose will clear all and set isdisposed = true, so it will not accept any new disposable
disposables.dispose();
在我的例子中,我使用片段作为我的视图(在MVP中查看图层),在某些情况下,我将活动片段添加到backstack,实际上不会杀死Fragment但只会查看其视图.这意味着只调用onDestroyView而不是onDestroy.后来我可以回到Backstack中的同一个片段,所以只有它的视图才被重新创建.
我有一个Compositedisposable作为我的BaseFragment的成员,它持有订阅.
我的问题是,我应该每次在onDestroyView上调用Compositedisposable吗?一旦视图恢复,它可以再次获取订阅吗?并且在onDestroy上调用dispose,这样当片段本身被销毁时,不再需要使用一次性用品了吗?
如果错了,处理的正确方法是什么.当清除和处置必须被调用.?
解决方法:
您是对的,您可以保存自己在每次创建相应视图时创建新的Compositedisposable,而是将Compositedisposable视为绑定到onCreate / onDestroy生命周期方法的单个实例,并将聚合的一次性用作片段视图的一部分在onDestroyView中调用clear.
Android-Google在Singleton模式方面的矛盾
我已经阅读了一些有关Android中的Singleton模式用法及其在保留Context方面的缺点的信息。实际上,当我实现以下代码时:
private static HttpManager sSingleton;
private Context mContext;
private HttpManager(Context context) {
mContext = context;
}
public static synchronized HttpManager getInstance(Context context) {
if (sSingleton == null) {
sSingleton = new HttpManager(context);
}
return sSingleton;
}
Android Studio向我显示以下警告:
不要将Android上下文类放在静态字段中(对HttpManager的静态引用,其中mContext字段指向Context);这是内存泄漏,并且还会中断即时运行。
但是,我可以在此页面的Android文档中看到并实现Singletons
。
如果您的应用程序不断使用网络,则设置单个RequestQueue实例(这将持续应用程序的生命周期)可能是最有效的。您可以通过多种方式实现这一目标。推荐的方法是实现一个封装RequestQueue和其他Volley功能的单例类。
由于Google自身存在矛盾,因此有人可以在这方面指导我并提出建议吗?
关于c# – 在Singleton上使用Dispose来清理资源和c#清楚的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android SingleTask,SingleTop和Home Button、android – Dagger 2 Singleton vs Real Singleton、android – 何时调用dispose并清除CompositeDisposable、Android-Google在Singleton模式方面的矛盾的相关知识,请在本站寻找。
本文标签: