当前位置: 代码迷 >> Android >> 即使用户强行关闭服务也如何启动?
  详细解决方案

即使用户强行关闭服务也如何启动?

热度:56   发布时间:2023-08-04 12:14:36.0

即使用户强制停止应用程序或某些其他应用程序强制停止我的应用程序,我也想启动我的服务。 这是我的代码。

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

    AlarmManager alarmMgr = (AlarmManager)this.getSystemService(this.ALARM_SERVICE);
    Intent i = new Intent(this, LocationUpdateService.class);
   PendingIntent pendingIntent = PendingIntent.getService(this, 0, i, 0);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10, pendingIntent);
}

首先,强制违反用户意愿强制运行服务是非常糟糕的模式。 无论如何,您都可以使用BroadcastReceiver重新启动它,它处理从服务的onDestroy()发送的广播。

StickyService.java

public class StickyService extends Service
 {
private static final String TAG = "StickyService";


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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.e(TAG, "onStartCommand");
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    sendBroadcast(new Intent("YouWillNeverKillMe"));
}

}

RestartServiceReceiver.java

public class RestartServiceReceiver extends BroadcastReceiver
{

private static final String TAG = "RestartServiceReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    Log.e(TAG, "onReceive");
context.startService(new Intent(context.getApplicationContext(), 
StickyService.class));

}

  }

声明清单文件中的组件

 <service android:name=".StickyService" >
</service>

<receiver android:name=".RestartServiceReceiver" >
    <intent-filter>
        <action android:name="YouWillNeverKillMe" >
        </action>
    </intent-filter>
</receiver>

在组件(即应用程序,活动,片段)中启动StickyService: startService(new Intent(this, StickyService.class));

我从onDestroy()开始服务。如果任何人有更有效的方法来执行此代码,请对它进行评论。

@Override
 public void onDestroy() {
    super.onDestroy();
    startLocationUpdateService(); 
    }
  相关解决方案