我在过去的两天里在互联网上搜索,但没有找到任何有用的教程。我创建了一个服务,并在服务启动时向状态栏发送通知。我希望在显示通知后停止该服务,并在5分钟后重新启动它。如果可能的话,请告诉我并提供一些有用的教程。我听说过 TimerTask
和 AlarmManager
,我也尝试使用它们,但是未能获得所需的结果。
编辑:即使我的应用程序没有运行,我也需要每5分钟启动服务。
我在过去的两天里在互联网上搜索,但没有找到任何有用的教程。我创建了一个服务,并在服务启动时向状态栏发送通知。我希望在显示通知后停止该服务,并在5分钟后重新启动它。如果可能的话,请告诉我并提供一些有用的教程。我听说过 TimerTask
和 AlarmManager
,我也尝试使用它们,但是未能获得所需的结果。
编辑:即使我的应用程序没有运行,我也需要每5分钟启动服务。
使用 TimerTask
并不可行,因为它需要你的应用程序持续运行。使用 AlarmManager
实现可以确保在执行之间应用程序被杀死也是安全的。
仅仅说尝试使用 AlarmManager
但未获得预期结果并没有帮助,因为这并没有告诉任何人如何帮助你成功。更有用的是表达实际发生了什么。
http://web.archive.org/web/20170713001201/http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/ 包含了一篇关于 AlarmManager
的教程,看起来很有用。以下是重点:
1)闹钟到期时将会触发一个 Intent
,你需要自己决定生成哪种类型的 Intent
以及如何实现。提供的链接中有一个基于 BroadcastReceiver 的完整示例。
2)你可以用类似以下的示例来安装你的闹钟:
public void setOnetimeTimer(Context context) {
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
intent.putExtra(ONE_TIME, Boolean.TRUE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 5), pi);
}
下面我提供了三个文件,MainActivity.java是启动服务的文件,第二个文件MyService.java提供5分钟的服务,第三个文件是清单文件。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, MyService.class)); //start service which is MyService.java
}
}
public class MyService extends Service {
public static final int notify = 300000; //interval between two services(Here Service run every 5 Minute)
private Handler mHandler = new Handler(); //run on another Thread to avoid crash
private Timer mTimer = null; //timer handling
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
if (mTimer != null) // Cancel if already existed
mTimer.cancel();
else
mTimer = new Timer(); //recreate new
mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify); //Schedule task
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer.cancel(); //For Cancel Timer
Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
}
//class TimeDisplay for handling task
class TimeDisplay extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
// display toast
Toast.makeText(MyService.this, "Service is running", Toast.LENGTH_SHORT).show();
}
});
}
}
}
<service android:name=".MyService" android:enabled="true" android:exported="true"></service>
Timer
对象,并给它一个 TimerTask
,执行你想要执行的代码。Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
@Override
public void run () {
// your code here...
}
};
// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60); // 1000*10*60 every 10 minut
Calendar wakeUpTime = Calendar.getInstance(); wakeUpTime.add(Calendar.SECOND, seconds); AlarmManager aMgr = (AlarmManager) getSystemService(ALARM_SERVICE); aMgr.set(AlarmManager.RTC_WAKEUP, wakeUpTime.getTimeInMillis(), pendingIntent);
- Alpay