2017-03-02 8 views
0

私はsdk /ライブラリの形で実装されたスティッキーバックグラウンドサービスを持っています。私はメモリ使用量を最小限に抑えようとしています。私は別々のプロセスを使用しようとしましたが、Androidはライブラリを使用するメインアプリに属している可能性があります。空のSDKtestアプリケーションでライブラリを使用すると、メモリ使用量が適切なレベルに低下します。さらに、このメモリは、プリロードされたシステムのドロウアブルにトレースされますが、なぜ1つのケースでプライベートダーティとして分類されるのか分かりません。だから外のapkとしてのサービスを持つことは問題を解決しますが、あなたはそれが実用的ではないと推測することができます。どのようにこれを進めるのか?Androidのスティッキーバックグラウンドサービスのメモリ使用量を最適化する

** MEMINFO in pid 14571 [org.abc.abc:Service] ** 
       Pss Private Private Swapped  Heap  Heap  Heap 
       Total Dirty Clean Dirty  Size Alloc  Free 
       ------ ------ ------ ------ ------ ------ ------ 
Native Heap  4481  4308  0  1008  7292  6353  938 
Dalvik Heap  5649  5532  0  0  7373  6980  393 
Dalvik Other  616  616  0  0       
     Stack  332  332  0  0       
    Other dev  5  0  4  0       
    .so mmap  2623  152  1472  2832       
    .apk mmap  204  0  128  0       
    .ttf mmap  56  0  48  0       
    .dex mmap  1576  0  1484  0       
    .oat mmap  3467  0  1588  0       
    .art mmap  2739  760  264  0       
Other mmap  6  4  0  0       
    GL mtrack  3380  3380  0  0       
    Unknown  166  164  0  144       
     TOTAL 25300 15248  4988  3984 14665 13333  1331 

Objects 
      Views:  0   ViewRootImpl:  0 
     AppContexts:  3   Activities:  0 
      Assets:  3  AssetManagers:  3 
    Local Binders:  8  Proxy Binders:  23 
    Parcel memory:  40   Parcel count:  54 
    Death Recipients:  0  OpenSSL Sockets:  0 

SQL 
     MEMORY_USED:  0 
PAGECACHE_OVERFLOW:  0   MALLOC_SIZE:  0 

** MEMINFO in pid 7908 [org.abc.sdktest:abcSDKTestService] ** 
       Pss Private Private Swapped  Heap  Heap  Heap 
       Total Dirty Clean Dirty  Size Alloc  Free 
       ------ ------ ------ ------ ------ ------ ------ 
Native Heap  1754  1576  0  1880  5320  4132  1187 
Dalvik Heap  1101  976  0  2680  7122  5390  1732 
Dalvik Other  244  244  0  0       
     Stack  176  176  0  0       
    Other dev  5  0  4  0       
    .so mmap  299  68  0  2868       
    .apk mmap  168  0  140  0       
    .dex mmap  1532  0  1448  0       
    .oat mmap  1275  0  0  0       
    .art mmap  2130  604  8  0       
Other mmap  4  4  0  0       
    Unknown  78  76  0  160       
     TOTAL  8766  3724  1600  7588 12442  9522  2919 

Objects 
      Views:  0   ViewRootImpl:  0 
     AppContexts:  3   Activities:  0 
      Assets:  3  AssetManagers:  3 
    Local Binders:  4  Proxy Binders:  19 
    Parcel memory:  32   Parcel count:  42 
    Death Recipients:  0  OpenSSL Sockets:  0 

SQL 
     MEMORY_USED:  0 
PAGECACHE_OVERFLOW:  0   MALLOC_SIZE:  0 
+0

サービスコードを最適化できるように投稿してください – Kushan

+0

サービスコード自体は無関係で、何千もの行です。 – erenbz

答えて

1

根本的な原因は、条件付きトーストの表示であることが判明しました。トーストを削除すると問題が解決しました。通知は同じ現象を引き起こしません。どうやら、Toastは、あらかじめロードされたドロワブルのように、それを使ってビュールートとすべての手荷物を初期化します。これらのプリロードされたドロアブルは、Zygoteに属しているので、理想的にはプライベートなダーティーメモリとして表示すべきではありませんが、どういうわけか他のアプリケーションで利用されていないと思います。したがって、そのような場合にUI要素を削除する必要があります。

関連する問題