我的应用程序有一个回收器视图,它可以启动一个服务,为每个特定项目提供通知和计时器。当我启动计时器时,计时器将显示在设备上的通知中。当只显示一个计时器时,此功能正常工作。但是,当运行多个计时器时,有些计时器将冻结而不倒计时。
我想知道是否有可能从这个服务运行多个通知计时器而不冻结一些通知。
这里是我在recycler视图适配器中选择项目时创建服务的地方
holder.img_start.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onClick(View view) {
holder.img_start.setImageResource(R.drawable.ic_stop);
holder.img_start.setClickable(false);
Intent intent = new Intent(context, TimerService.class);
Bundle bundle = new Bundle();
bundle.putString("name", timer.getTimer_name());
bundle.putString("img", timer.getTimer_img());
bundle.putInt("dur", 10000);
bundle.putInt("id", timer.getTimer_id());
intent.putExtra("bundle", bundle);
context.startForegroundService(intent);
}
});
以下是创建的计时器服务:
package com.ashb.osrstimers;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.IBinder;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class TimerService extends Service {
private Bundle bundle;
private String timer_img;
private String timer_name;
private int timer_id;
private int duration;
private int icon;
private Context context = this;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
this.bundle = intent.getBundleExtra("bundle");
this.timer_img = bundle.getString("img");
this.timer_name = bundle.getString("name");
this.timer_id = bundle.getInt("id");
this.duration = bundle.getInt("dur");
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "notifyLemubit")
.setSmallIcon(this.icon)
.setContentTitle("Timer Running")
.setContentText("Time Until Your " + this.timer_name + " Tree has Fully Grown: " + this.duration)
.setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
final NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(this.timer_id, builder.build());
new CountDownTimer(10 * 1000, 1000) {
@Override
public void onTick(long ms_until_done) {
builder.setContentText("Time Until Your " + timer_name + " Tree has Fully Grown: " + ms_until_done / 1000);
notificationManagerCompat.notify(timer_id, builder.build());
}
@Override
public void onFinish() {
notificationManagerCompat.cancel(timer_id);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notifyLemubit")
.setSmallIcon(icon)
.setContentTitle("Timer Finished")
.setContentText("Your " + timer_name + " is Fully Grown!")
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
final NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(timer_id, builder.build());
}
}.start();
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
}
}
谢谢你的帮助
暂无答案!
目前还没有任何答案,快来回答吧!