1

我有点厌倦了在我继承的 Xamarin.Android 应用程序中发现的硬引用 - 引用操作的操作、回调中发生的古怪事情等。所以我决定在 TinyIoC 中注册操作并在需要时解决它们。

这有点工作了一段时间,直到我开始注意到发生了奇怪的事情。如果应用程序长时间单独放置,应用程序会崩溃 - 查看日志,这是因为 I-oC 无法解决其中一个操作 - 在应用程序长时间放置之前它可能会崩溃。

这上面写满了 GC——如果你问我的话。GC 显然没有将 IoC 中的项目视为参考并处理它们。

这是其他人遇到的吗?如果是这样,你是如何克服这个问题的?

4

2 回答 2

0

我的建议是不要使用 TinyIoC(或任何 IoC)来管理 Android 中的操作等。Android 似乎想以一种在使用 IoC 时被破坏的方式来管理对象的状态。

这将导致许多难以调试的问题 - 几乎无法调试。

于 2013-10-23T10:26:39.357 回答
0

查看http://welltechnically.com/?p=2671——见第 3 点。

我还没有尝试过,但它看起来很有希望。

下面直接复制粘贴...

“使用静态变量时要小心。不要以为在活动 1 中初始化它们时会在活动 2 中初始化它们。初始化全局静态变量的唯一安全位置是 Application 类。”

“Mark 还建议使用 DDMS 来模拟这种情况。我按照说明在启动后杀死了进程。正如预测的那样,被恢复的活动试图使用 IoC 容器来获取服务层并迅速将其所有玩具扔出“

using System;
using Android.App;
using Android.Runtime;
using SomeApplication.Common.Services;

namespace SomeApplication.Android
{
[Application(Debuggable = true, Icon = "@drawable/AppIcon", Label = "My Application")]
class MyApplication : Application
{
public MyApplication(IntPtr ptr, JniHandleOwnership ownership) : base(ptr, ownership)
{
}

public override void OnCreate()
{
base.OnCreate();

#if DEBUG
ServiceFactory.Initialize(ServiceFactoryType.Mock);
#else
ServiceFactory.Initialize(ServiceFactoryType.Service);
#endif
}
}
}
于 2013-11-01T17:51:27.573 回答