android原生定时任务_一个简单的Android定时任务

使用AlarmManager来实现定时提醒,它提供了一种访问系统闹钟服务的方式。在全局中,达到设定的时间,

在它上面注册的一个Intent将会被广播,接着启动相应的应用程序,可以通过自定义Receiver来实现。

首先要在AndroidManifest.xml中进行注册

自定义一个闹钟接收器,getIntExtra可用于接受发送方putExtra传过来的值,Intent i = new Intent(“CLOCK”)其中的“CLOCK”是注册时使用的seceiver的name。

public class AlarmReceiver extends BroadcastReceiver {

private int _id;

private String str;

@Override

public void onReceive(Context context, Intent intent) {

_id = intent.getIntExtra("ID", -1);

Intent i = new Intent("CLOCK");

i.setClass(context, NoteEditor.class);

i.putExtra("ID", _id);

String str = intent.getStringExtra("NOTE");

Toast.makeText( context, str, Toast.LENGTH_SHORT).show();

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(i);

}

}

时间的获取通过DatePickerDialog和TimePickerDialog,需要注意的是DatePickerDialog的月份是从0开始。将获取的数据放在Calendar类中,其中月份的存储也是从0开始。

final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

Calendar alarmCalendar = Calendar.getInstance();

alarmCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute,0);

Intent i = new Intent("CLOCK");

i.setClass(this, AlarmReceiver.class);

i.putExtra("ID", _id);

String note="notes";

i.putExtra("NOTE",note);

设置一个PendingIntent对象作为闹钟响应的对象,发送广播。第二个参数可以为0,但是因为做的是一次性的闹钟,如果为0的话,新设的闹钟会将之前设的闹钟覆盖掉。FLAG_UPDATE_CURRENT: 如果希望获取的PendingIntent对象与已经存在的PendingIntent对象相比,如果只是Intent附加的数据不同, 那么当前存在的PendingIntent对象不会被取消,而是重新加载新的Intent附加的数据。

PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);

发送闹钟请求,设置在alarmCalendar.getTimeInMillis()时间启动由pi指定的组件。

第一个参数用来指定定时服务的类型,主要可选以下值:

AlarmManager.ELAPSED_REALTIME:睡眠状态下不可用,该状态下闹钟使用相对时间。

AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠状态下会唤醒系统并执行提示功能,也使用相对时间。

AlarmManager.RTC:该状态睡眠状态下不可用,使用绝对时间,即当前系统时间。

AlarmManager.RTC_WAKEUP:闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用绝对时间。

am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可以使用Unity的InvokeRepeating方法来实现定时执行某个方法。在该方法中,你可以通过AndroidJNI类调用Android原生的方法来获取设备内存信息,并将其保存在日志文件中。具体实现步骤如下: 1. 在Unity中创建一个脚本,例如MemoryLogger.cs。 2. 在该脚本中,定义一个方法来获取设备内存信息并保存在日志文件中。例如: ``` private void LogMemory() { // 获取Android的Activity对象 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); // 获取ActivityManager对象 AndroidJavaObject activityManager = activity.Call<AndroidJavaObject>("getSystemService", "activity"); // 获取MemoryInfo对象 AndroidJavaObject memoryInfo = new AndroidJavaObject("android.app.ActivityManager$MemoryInfo"); activityManager.Call("getMemoryInfo", memoryInfo); // 获取可用内存大小 long availableMemory = memoryInfo.GetLong("availMem"); // 将可用内存大小保存在日志文件中 Debug.Log("Available memory: " + availableMemory); // TODO: 将可用内存大小保存在日志文件中 } ``` 3. 在Start方法中,使用InvokeRepeating方法来定时执行LogMemory方法。例如: ``` void Start() { // 每5秒执行一次LogMemory方法 InvokeRepeating("LogMemory", 0.0f, 5.0f); } ``` 4. 将该脚本挂载在场景中的任何一个GameObject上,运行游戏即可定时记录设备内存信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值