我正在编写一个在后台执行某些操作(即服务)的小型 Android 应用程序,我希望它在每隔“x”分钟后显示一条消息。我如何使用广播监听器和警报管理器来完成它。有人可以写一个示例代码来演示它吗。
最佳答案
您可以通过在 Service
类中使用 Timer
和 TimerTask
轻松地做到这一点。
1. 在您的 Service
类中,首先创建一个内部类 DisplayToastTimerTask
扩展自 TimerTask
以显示Toast
消息。您必须将 Handler
与 Runnable
一起使用才能显示 TimerTask
中的 Toast
:
private class DisplayToastTimerTask extends TimerTask {
Handler mHandler = new Handler();
@Override
public void run() {
// Do something....
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Hello world", Toast.LENGTH_SHORT).show();
}
});
}
}
2.使用Timer
调度DisplayToastTimerTask
以2分钟
的间隔重复执行
private static final int TIMER_INTERVAL = 120000; // 2 Minute
private static final int TIMER_DELAY = 0;
// Create new Timer
Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY, TIMER_INTERVAL);
示例:
#. 下面是完整的 Service
类:**
//MyService.java
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MyService extends Service {
private Timer mTimer;
private Handler mHandler = new Handler();
private static final int TIMER_INTERVAL = 120000; // 2 Minute
private static final int TIMER_DELAY = 0;
@Override
public void onCreate() {
super.onCreate();
if (mTimer != null)
mTimer = null;
// Create new Timer
mTimer = new Timer();
// Required to Schedule DisplayToastTimerTask for repeated execution with an interval of `2 min`
mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY, TIMER_INTERVAL);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
// Cancel timer
mTimer.cancel();
}
// Required to do some task
// Here I just display a toast message "Hello world"
private class DisplayToastTimerTask extends TimerTask {
@Override
public void run() {
// Do something....
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Hello world", Toast.LENGTH_SHORT).show();
}
});
}
}
}
#. 您可以像下面这样启动您的服务
:
Intent intentMyService = new Intent(context, MyService.class);
mContext.startService(intentMyService);
#. 不要忘记将 MyService
类声明到 AndroidManifest.xml
中:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application>
<service android:name=".MyService" />
</application>
</manifest>
希望对你有帮助~
关于android - 在android中每2分钟显示一次 toast 的后台服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066057/