当我的前台服务在Boot上启动时,TouchWiz会停止并重新启动

时间:2015-12-18 12:00:32

标签: android android-intent android-service android-notifications

我是android开发初学者,这是我的情况:

我正在实现一个可以从我的应用程序启动/停止的前台服务。

一切正常,直到我在我的设备上进行测试,每次在Boot Completed上重新启动服务,TouchWiz都会失败并重新启动。

编辑:现在,当设备重新启动时,服务会启动,尽管根本没有运行(可能是我必须存储一些布尔变量才能在接收时采取适当的操作开机完成)

我遗漏了一些重要的东西,但无法弄明白。 任何想法,可能是我缺少的一些额外许可,或者至少我如何能够了解TouchWiz从我的Android设备日志中失败时发生的事情。

收件人代码:

public class MyServiceReceiver extends BroadcastReceiver {
//Ctor:
public MyServiceReceiver() {super();}
//Receive Boot Action:
@Override
public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent restartServiceIntent = new Intent(context,MyService.class);
            context.startService(restartServiceIntent);
        }
}}

为MyService

public class MyService extends Service {
//ctor:
public MyService() {}
//On Create Service:
@Override
public void onCreate() {
    super.onCreate();
    pNotification = setNotification();
    isRunning = false;
    this.startForeground(SERVICE_NOTIFICATION_ID,pNotification);
}

//Notifications:
public static final String SERVICE_NOTIFICATION_TAG = "My_SERVICE";
public static final int SERVICE_NOTIFICATION_ID = 22101982;
private Notification pNotification;
private Notification setNotification(){
    NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(MyApplication.getMyAppContext());
    notifBuilder.setAutoCancel(false);
    notifBuilder.setContentTitle(getResources().getString(R.string.service_notification_title));
    notifBuilder.setContentText(getResources().getString(R.string.service_notification_message));
    notifBuilder.setSmallIcon(R.drawable.ic_action_record);
    Intent mainIntent = new Intent(this,MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,SERVICE_NOTIFICATION_ID,mainIntent,0);
    notifBuilder.setContentIntent(pendingIntent);
    return notifBuilder.build();
}

public static boolean IsRunning(){return isRunning;}
private static boolean isRunning;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    //TODO:Initialisations
    isRunning = true;
    return START_STICKY;
}

//On Destroy Service:
@Override
public void onDestroy() {
    super.onDestroy();
    isRunning = false;
}

@Override
public IBinder onBind(Intent intent) {return null;}}//My service

更新 该问题仅出现在“重新启动”但不在我关机时启动 - 启动设备。

1 个答案:

答案 0 :(得分:0)

因此;问题刚刚消失,我唯一改变的是通知ID和PendingIntent id是相同的......我不知道为什么这个问题在第一时间提出并且我继续前进但是这让我担心并且我对它的起源感到好奇

我认为这是来自通知服务显示正在与touchwiz开始序列或类似的事情竞争。

无论如何,我坚持这个问题,直到有一天有人遇到同样的好奇情况。

感谢您的建议