Android App启动问题(成长堆)

时间:2014-09-17 08:53:47

标签: android xamarin out-of-memory

我的应用程序存在很大问题。 我们需要很多空间来进行位图转换,但是 直接在Startup(应用程序)的大部分内存获取与未知的东西分配... 您可以在下面找到Xamarin Studio的控制台输出。 什么可能触发如此大的分配? 该应用程序在不同的设备上进行测试,下面的输出来自最差的一个(三星Galaxy S3)

这是我对MainActivity的OnCreate:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);
}

控制台输出:

Forwarding debugger port 8808
Detecting existing process
Loaded assembly: /storage/emulated/0/Android/data/com.#AppName#.#AppName#/files        /.__override__/#AppName#.dll
Loaded assembly: Mono.Android.dll [External]
Loaded assembly: System.Core.dll [External]
Loaded assembly: MonoDroidConstructors [External]
[monodroid-debug] Trying to initialize the debugger with options: --debugger-    agent=transport=dt_socket,loglevel=0,address=127.0.0.1:8808,server=y,embedding=1
[libc] WARNING: generic atexit() called from legacy shared library
[Mono] Image addref mscorlib[0x57bc76f0] -> mscorlib.dll[0x41d0f588]: 1
[Mono] AOT module 'mscorlib.dll.so' not found: dlopen failed: library "/data        /data/com.#AppName#.#AppName#/lib/mscorlib.dll.so" not found
[Mono] Assembly mscorlib[0x57bc76f0] added to domain RootDomain, ref_count=1
[Mono] Assembly Loader probing location: '/storage/emulated/0/Android        /data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll'.
[Mono] Image addref #AppName#[0x57bc9dd8] -> /storage/emulated/0/Android        /data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll[0x57bc9008]: 2
[Mono] Assembly #AppName#[0x57bc9dd8] added to domain RootDomain, ref_count=1
[Mono] AOT module '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.so' not found: dlopen failed: library "/data    /data/com.#AppName#.#AppName#/lib//storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.so" not found
[Mono] Assembly Loader loaded assembly from location: '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll'.
[Mono] Config attempting to parse: '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.config'.
[Mono] Config attempting to parse: '/Users/builder/data/lanes/1131/2a7b6821/source/monodroid/builds/install/mono-armv7/etc/mono/assemblies/#AppName#/#AppName#.config'.
[monodroid-gc] GREF GC Threshold: 46800
[Mono] Image addref Mono.Android[0x57bcac10] -> Mono.Android.dll[0x57bca250]: 1
[Mono] Assembly Mono.Android[0x57bcac10] added to domain RootDomain, ref_count=1
[Mono] AOT module 'Mono.Android.dll.so' not found: dlopen failed: library "/data/data/com.#AppName#.#AppName#/lib/Mono.Android.dll.so" not found
[Mono] Assembly Ref addref Mono.Android[0x57bcac10] -> mscorlib[0x57bc76f0]: 2
[Mono] Image addref System.Core[0x59182658] -> System.Core.dll[0x59181a40]: 1
[Mono] Assembly System.Core[0x59182658] added to domain RootDomain, ref_count=1
[Mono] AOT module 'System.Core.dll.so' not found: dlopen failed: library "/data/data/com.#AppName#.#AppName#/lib/System.Core.dll.so" not found
[Mono] Assembly Ref addref Mono.Android[0x57bcac10] -> System.Core[0x59182658]: 2
[Mono] Assembly Ref addref System.Core[0x59182658] -> mscorlib[0x57bc76f0]: 3
[Mono] Assembly Ref addref #AppName#[0x57bc9dd8] -> Mono.Android[0x57bcac10]: 2
[Mono] DllImport attempting to load: '__Internal'.
[Mono] DllImport loaded library '(null)'.
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for '_monodroid_gc_wait_for_bridge_processing'.
[Mono] Probing '_monodroid_gc_wait_for_bridge_processing'.
[Mono] Found as '_monodroid_gc_wait_for_bridge_processing'.
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for '_monodroid_get_identity_hash_code'.
[Mono] Probing '_monodroid_get_identity_hash_code'.
[Mono] Found as '_monodroid_get_identity_hash_code'.
[Mono] Assembly Ref addref #AppName#[0x57bc9dd8] -> mscorlib[0x57bc76f0]: 4
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for '_monodroid_gref_log_new'.
[Mono] Probing '_monodroid_gref_log_new'.
[Mono] Found as '_monodroid_gref_log_new'.
[dalvikvm-heap] Grow heap (frag case) to 12.344MB for 2005072-byte allocation
[dalvikvm-heap] Grow heap (frag case) to 19.993MB for 8020240-byte allocation
[dalvikvm-heap] Grow heap (frag case) to 32.004MB for 11632656-byte allocation
[Mono] DllImport searching in: '__Internal' ('(null)').
[Mono] Searching for '_monodroid_gref_log_delete'.
[Mono] Probing '_monodroid_gref_log_delete'.
[Mono] Found as '_monodroid_gref_log_delete'.

感谢您的帮助!

编辑:

在Manifest中使用LargeHeap不起作用。 当我在没有布局的情况下加载应用程序时,堆大小也增加到19mb。

2 个答案:

答案 0 :(得分:1)

如果您没有使用自定义Application类且setContentView(),则有一行代码可能导致内存分配。您可能在Layout xml上有大图像或图像太多。尝试简化布局xml或使用较小的图像。如果您没有内存不足,则不需要更改此内容;但是你需要更多的空间来进行图像操作,所以你可以这样做(但不建议这样做):android:largeHeap="true"

答案 1 :(得分:1)

我发现了问题。 在我的drawable文件夹不是正确的Icon.png。 我使用的Icon的分辨率为708x708。我用一个较小的替换它,现在它可以... 谢谢Ercan让我朝着正确的方向前进。