Android规划周期任务

问题:应用总要周期性的执行某项任务,例如检查服务器上的更新或者提醒用户做某些事情。

解决方案:用AlarmManager来管理和执行任务。AlarmManager可用于计划未来的单次或重复操作,甚至在应用没有运行时也可以执行任务

AlarmManager通过发出PendingIntent来发出警告触发时执行各种系统的组件,例如Activity、Broadcast、Receiver、Service。

 

编写被触发的BroadcastReceiver

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //可以执行一个有趣的操作,我们这里只是显示当前时间
        Calendar now = Calendar.getInstance();
        java.text.DateFormat formatter = SimpleDateFormat.getTimeInstance();
        Toast.makeText(context, formatter.format(now.getTime()), 100).show();
        
    }
}

 

BroadcastReceiver必须在Manifest文件中用<receiver>标签声明,否则AlarmManager就无法将其触发。

<receiver android:name=".AlarmReceiver"></receiver>

 

设置和取消提醒是通过PendingIntent实现的。我们创建一个直接指向应用的BroadcastReceiver的Intent,然后用getBroadcast()(因为我们创建了指向BroadcastReceiver的引用)从中创建一个PendingIntent。

import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

    private PendingIntent mAlarmIntent;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //为两个按钮附加监听器
        findViewById(R.id.start).setOnClickListener(this);
        findViewById(R.id.stop).setOnClickListener(this);
        //创建提醒触发器
        Intent launchIntent = new Intent(this, AlarmReceiver.class);
        mAlarmIntent = PendingIntent.getBroadcast(this, 0, launchIntent, 0);
    }

    @Override
    public void onClick(View view) {
        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        long interval = 5*1000;
        switch (view.getId()) {
        case R.id.start:
            Toast.makeText(this, "Scheduled", 100).show();
            //ELAPSED_REALTIME根据时间触发提醒,如果设备处于休眠状态,会将设备激活。
            manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+interval, interval, mAlarmIntent);
            break;
        case R.id.stop:
            Toast.makeText(this, "Canceled", 100).show();
            manager.cancel(mAlarmIntent);
            break;
        default:
            break;
        }
    }
}

Android规划周期任务,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。