2011-07-09 15 views
0

これは、特にユースケースを考慮していないAndroidに関する一般的な質問です。私は現在プラットフォームを学んでいるので、サービスを利用してexperimentationをやっています。startService()とstopService()とメモリ..何が起こっていますか?

サービスを拡張するTestServiceというクラスを作成しました。私はコードを変更せず、サービス内で何もしなかった。本質的には、空のサービスに過ぎません。私は私の活動でサービス開始、

次のコードを使用して
public class TestService extends Service { 
    @Override 
     public IBinder onBind(Intent intent) {  
      return null; 
     } 
    } 

:これは私が何を意味するかである

Intent sIntent = new Intent(); 
    sIntent.setClassName("com.mytestapp.android.servicetest", 
      "com.mytestapp.android.servicetest.TestService"); 
    startService(sIntent); 

をし、それを止めるために、私は呼ん:今すぐ

stopService(sIntent); 

へ私のサービスが実際に開始されているかどうかを監視して、設定 - >アプリケーション - >実行中のサービスに移動して、アンドロイドから提供されている実行中のサービスリストにアクセスしました。そしてうーん、それは動作します..サービスがそこに現れます。

しかし、私が気付いた点は、いつでもサービスを停止して再開することです。サービスで使用されているメモリが増えているようです(実行中のサービス情報が示すように)。約20回実行した後、サービスで使用されるメモリは、元のメモリの約50%増加しました!

私はこれが奇妙であると思っています。誰かがここで何が起こっているように見えるのか誰もが分かりますか?これは正常ですか?

答えて

1

これは正常ですか?

ほとんどの場合、これらのオブジェクトはまだガベージコレクションされていません。

+0

ああ、私がしたいと思ったらガベージコレクションをする方法はありますか?したほうがいい? – Coins

+0

@Coins:Androidは必要なときにガベージコレクションを実行します。ほとんどのアプリケーションはサービスを迅速に開始したり停止したりするわけではありませんので、手動でガベージコレクションをリクエストする必要はありません。 – CommonsWare

+0

Hrmm、 'System.gc()'を試しましたが、うまくいかないようです。しかし、サービス 'onDestroy()'の中の 'android.os.Process.killProcess(android.os.Process.myPid())'はこれをお勧めしますか?もちろん私はそれをクリアする正当な理由があると仮定します。 – Coins

関連する問題