繁体   English   中英

如何防止服务在Android中重启?

[英]How can I prevent service restarting in Android?

我有一项服务可以在特定时间显示通知,还有一个broadcastreceiver可以启动此服务。 启动应用程序后,该服务将启动并显示通知,并在设备上运行的应用程序中显示该服务,但有时在正在运行的应用程序服务中为“正在重新启动”,并且不会显示该消息。

我的服务代码是:

public class NotificationService extends Service {
private boolean flag=false;
public static NotificationCompat.Builder mBuilder;

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Timer timer=new Timer();
    final Context context=getApplicationContext();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            if(CheckTime()){
                //Intent intent = new Intent(context, NotificationReciver.class);
                //sendBroadcast(intent);
                showNotification();
            }
        }
    },0,(1000*60));

    return START_NOT_STICKY;
}

private boolean CheckTime(){
    final Context context=getBaseContext();
    Calendar calendar=Calendar.getInstance();
    int hour=calendar.get(Calendar.HOUR_OF_DAY);
    int minute=calendar.get(Calendar.MINUTE);

    if(hour==16 && minute==11){
        return true;
    }else {
        return false;
    }
}

private void showNotification() {
    Context context=getApplicationContext();
    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    Intent intent=new Intent(context, QuestionActivity.class);
    PendingIntent pendingIntent=PendingIntent.getActivity(context,0,intent,0);

    mBuilder = new NotificationCompat.Builder(context).
            setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Feelinger")
            .setContentText("How are you feeling today?")
            .setSound(alarmSound)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)
            .setVibrate(new long[]{300, 200, 200, 200});

    android.app.NotificationManager mNotificationManager = (android.app.NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    mNotificationManager.notify(100, mBuilder.build());
}

和BroadcastReceiver代码是:

public class NotificationManager extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    context.startService(new Intent(context,NotificationService.class));
}

如何解决这个问题呢?

写内部服务

@Override
public int onStartCommand (Intent intent, int flags, int startId)
{
    return START_NOT_STICKY;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM