2

基本的にX個のRSSフィードを解析するアプリ用のサービスがあります。ほとんどのフィードはかなり小さいですが、サイズが約 1MB のものもあります。サービスの AsyncTask でそれらを解析しています。ユーザーの接続とフィードの数によっては、解析にかなり時間がかかる場合がありますが、せいぜい 1 ~ 2 分程度です。サービスで 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();

    }   
}
4

2 に答える 2

2

サービスで WakeLock を使用することは良い考えですか?

はい、デバイスがスリープ状態になると問題が発生する可能性がある場合。WakefulIntentServiceただし、オブジェクトの処理にはトリッキーなケースが多いため、 my を使用することをお勧めしWakeLockます。AsyncTaskまた、独自のorをいじる必要もありません。これらは(from which inherits)stopSelf()によって処理されるためです。IntentServiceWakefulIntentService

于 2012-03-18T20:24:29.380 に答える
0

サービスはバックグラウンドで実行されますが、ウェイクロックを取得するポイントはありませんが、アクティビティが実行されているかどうかを確認し、その状態でウェイクロックを取得し、アクティビティが終了したら解放することができます

于 2012-03-18T20:11:35.553 に答える