不确定我是否需要一个WakeLock

时间:2012-03-18 20:04:08

标签: android android-service wakelock

我的应用程序服务基本上解析了X个RSS源。大多数Feed非常小,但有些可能大约1MB。我正在我的服务中的AsyncTask中解析它们。解析可能相当耗时,具体取决于用户的连接和提要数量,但我说最多不超过一两分钟。在服务中使用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 个答案:

答案 0 :(得分:2)

  

在服务中使用WakeLock是个好主意吗?

是的,如果让设备入睡可能会给您带来麻烦。我建议您使用我的WakefulIntentService,因为处理WakeLock对象时有许多棘手的情况。您也不需要使用自己的AsyncTaskstopSelf(),因为IntentServiceWakefulIntentService继承)会为您处理这些内容。

答案 1 :(得分:0)

服务在后台运行,没有必要在那里获得唤醒锁 但是,您可以做的是检查您的活动是否正在运行并且在该条件下获取唤醒锁定并在活动结束时释放