2012-03-18 11 views
2

私は基本的にX個のRSSフィードを解析するアプリケーション用のサービスを持っています。ほとんどのフィードはかなり小さいですが、サイズによっては約1MBになるものもあります。私は私のサービスでAsyncTaskでそれらを解析しています。解析は、ユーザーの接続とフィードの数に応じてかなり時間がかかることがありますが、最大で1〜2分以内と言います。このサービスでWakeLockを使用することをお勧めしますか?ここでWakeLockが必要なのかどうかわからない

これはこれまでのコードです。これは、サービスを設定したりしないように最善の方法であるかどうかわからない:あなたの活動が実行されている場合はサービスがバックグラウンドで実行

public class MainService extends Service 
{ 
    private WakeLock mWakeLock; 

    @Override 
    public void onCreate() 
    {  
     handleIntent(); 
    } 

    @Override 
    public int onStartCommand(final Intent intent, final int flags, final int startId) 
    { 
     return START_STICKY; 
    } 

    @Override 
    public void onStart(final Intent intent, final int startId) { 
     handleIntent(); 
    } 

    protected void handleIntent() 
    { 
     // obtain the wake lock 
     final PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); 
     mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
     mWakeLock.acquire(); 

     if (!((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)).getBackgroundDataSetting()) 
     { 
      stopSelf(); 
      return; 
     } 

     new AsyncParsingTask().execute(); 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 

     mWakeLock.release(); 

    } 
} 

答えて

2

サービスでWakeLockを使用することをお勧めしますか?

はい、デバイスがスリープ状態になると、問題が発生する可能性があります。 WakeLockオブジェクトを処理するには多くのトリッキーなケースがあるので、私はWakefulIntentServiceを使用することをお勧めします。 IntentService(これはWakefulIntentServiceから継承されます)によって処理されるため、自分自身でAsyncTaskまたはstopSelf()を処理する必要はありません。

0

あなたが何ができるかが そこwakelockをacquireingのも意味がありませんことをチェックし、その状態でウェイクロックを取得し、アクティビティが終了したら解放する

関連する問題