2

我有一个主要活动,可以使用此命令启动服务

startService(new Intent(Main.this, Myservice.class));

而Myservice类是这样的

   public class Myservice extends Service {
private ShakeListener mShaker;
String startell;
SharedPreferences prefs;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub


    //Something

}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub

    //Do Something to detecting shake
            //Show my notification


}


@Override
public void onDestroy() {
    // TODO Auto-generated method stub

    //Stop Shake detection
            //stop notification


    super.onDestroy();
}


}

我的应用程序工作正常,但大约一小时后,服务自动停止,我的意思是大约一小时后抖动检测不再起作用。:(

我用谷歌搜索了一下,我发现我应该使用 StartForeground,但我没有找到如何使用。

现在,我应该如何在我的代码中使用 StartForeground?

4

3 回答 3

1

获取和释放锁的代码

//在onCreate()方法中获取唤醒锁

devicePowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

wakeLock = devicePowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
        if(wakeLock != null){
            if(wakeLock.isHeld() == false){
                wakeLock.acquire();
            }
        }

//在onDestroy()方法中释放唤醒锁

if (wakeLock != null) {
            if(wakeLock.isHeld()){
                wakeLock.release();
                wakeLock = null;
            }
}
于 2012-12-15T07:02:05.783 回答
0

我认为您的服务因您的设备进入睡眠状态而停止工作。如果您希望它一直在后台工作,您可以使用WakeLock来防止您的设备进入睡眠状态,但这会显着增加电池消耗,所以要小心。

编辑:你可以set()锁定onCreate你的方法Servicerelease()onDestroy()

于 2012-12-15T06:43:30.917 回答
0

是的,您可以通过调用startService方法启动服务。并通过这个例子,它会帮助你

示例项目

于 2012-12-15T06:18:03.143 回答