• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.systemTimer (系统定时器)(系统接口)
2<!--Kit: Basic Services Kit-->
3<!--Subsystem: Time-->
4<!--Owner: @huaxin05-->
5<!--Designer: @hu-kai45-->
6<!--Tester: @murphy1984-->
7<!--Adviser: @zhang_yixin13-->
8
9本模块主要由系统定时器功能组成。开发者可以使用定时功能实现定时服务,如闹钟等。
10
11> **说明:**
12>
13> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14> - 本模块接口为系统接口。
15
16## 导入模块
17
18
19```ts
20import { systemTimer } from '@kit.BasicServicesKit';
21```
22
23## 常量
24
25支持创建的定时器类型。
26
27**系统能力:** SystemCapability.MiscServices.Time
28
29| 名称                | 类型   | 值   | 说明                                          |
30| ------------------- | ------ | ---- |---------------------------------------------|
31| TIMER_TYPE_REALTIME | number | 1    | 系统启动时间定时器(定时器启动时间不能晚于当前设置的系统时间)。|
32| TIMER_TYPE_WAKEUP   | number | 2    | 唤醒定时器(如果未配置为唤醒定时器,则系统处于休眠状态下不会触发,直到退出休眠状态)。|
33| TIMER_TYPE_EXACT    | number | 4    | 精准定时器(系统时间修改的情况下,可能会出现最多1s的前后偏移误差)。|
34| TIMER_TYPE_IDLE     | number | 8    | IDLE模式定时器(仅支持系统服务配置,不支持应用配置)。|
35
36 ## TimerOptions
37
38创建系统定时器的初始化选项。
39
40**系统能力:** SystemCapability.MiscServices.Time
41
42| 名称        | 类型                                          | 必填 | 说明                                                                                                                                                                                                   |
43|-----------| --------------------------------------------- | ---- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
44| type      | number                                        | 是   | 定时器类型,可以使用 '\|' 多选。<br>取值为1,表示为系统启动时间定时器(定时器启动时间不能晚于当前设置的系统时间);<br>取值为2,表示为唤醒定时器;<br>取值为4,表示为精准定时器(APP被冻结时,定时器也会被冻结,并且定时器受统一心跳管控,因此即使是精准定时器也不能确保在指定时间点触发);<br>取值为8,表示为IDLE模式定时器(仅支持系统服务配置,不支持应用配置)。 |
45| repeat    | boolean                                       | 是   | 是否为循环定时器。true表示循环定时器,false表示单次定时器。                                                                                                                                                                 |
46| autoRestore<sup>15+</sup> | boolean                                     | 否   | 是否在设备重启后恢复。<br>true为重启后恢复,false为重启后不恢复。<br>仅支持非`TIMER_TYPE_REALTIME`类型且配置了wantAgent的定时器配置为true。                                                                                                      |                                               |     |                                                                                                                                                                                                      |
47| name<sup>15+</sup> | string | 否 | 定时器名称,长度不超过64字节。<br>同一个UID中不可以同时存在两个同名定时器。如果创建了一个和之前已创建的定时器名字相同的定时器,先创建的定时器会被销毁。|
48| interval  | number                                        | 否   | 定时器时间间隔,单位:毫秒。默认值为0。<br>如果是循环定时器,interval值最小为1s,最大为365天,建议interval值不小于5000毫秒;<br>单次定时器interval值为0。                                                                                                               |
49| wantAgent | WantAgent | 否   | 设置通知的WantAgent,定时器到期后通知(支持拉起应用MainAbility,不支持拉起ServiceAbility)。                                                                                                                                     |
50| callback  | void                                          | 否  | 用户需要执行的回调函数。                                                                                                                                                                                          |
51
52
53## systemTimer.createTimer
54
55createTimer(options: TimerOptions, callback: AsyncCallback&lt;number&gt;): void
56
57创建定时器,使用callback异步回调。
58
59**注意:需与[systemTimer.destroyTimer](#systemtimerdestroytimer)结合使用,否则会造成内存泄漏**
60
61**系统能力:** SystemCapability.MiscServices.Time
62
63**参数:**
64
65| 参数名   | 类型                          | 必填 | 说明                                                         |
66| -------- | ----------------------------- | ---- | ------------------------------------------------------------ |
67| options  | [TimerOptions](#timeroptions) | 是   | 创建系统定时器的初始化选项,包括定时器类型、是否循环触发、间隔时间、WantAgent通知机制等。 |
68| callback | AsyncCallback&lt;number>      | 是   | 回调函数,返回定时器的ID。                                   |
69
70**错误码:**
71
72以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
73
74| 错误码ID | 错误信息                                                                                                                                         |
75|-------|----------------------------------------------------------------------------------------------------------------------------------------------|
76| 202   | Permission verification failed. A non-system application calls a system API.                                                                 |
77| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3.Parameter verification failed. |
78
79**示例:**
80
81```ts
82import { BusinessError } from '@kit.BasicServicesKit';
83
84let options: systemTimer.TimerOptions = {
85  type: systemTimer.TIMER_TYPE_REALTIME,
86  repeat: false
87};
88try {
89  systemTimer.createTimer(options, (error: BusinessError, timerId: Number) => {
90    if (error) {
91      console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
92      return;
93    }
94    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
95  });
96} catch(e) {
97  let error = e as BusinessError;
98  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
99}
100```
101
102## systemTimer.createTimer
103
104createTimer(options: TimerOptions): Promise&lt;number&gt;
105
106创建定时器,使用Promise异步回调返回定时器的ID。
107
108**注意:需与[systemTimer.destroyTimer](#systemtimerdestroytimer)结合使用,否则会造成内存泄漏**
109
110**系统能力:** SystemCapability.MiscServices.Time
111
112**参数:**
113
114| 参数名  | 类型                          | 必填 | 说明                                                         |
115| ------- | ----------------------------- | ---- | ------------------------------------------------------------ |
116| options | [TimerOptions](#timeroptions) | 是   | 创建系统定时器的初始化选项,包括定时器类型、是否循环触发、间隔时间、WantAgent通知机制等。 |
117
118**返回值:**
119
120| 类型                  | 说明                          |
121| --------------------- | ----------------------------- |
122| Promise&lt;number&gt; | Promise对象,返回定时器的ID。 |
123
124**错误码:**
125
126以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
127
128| 错误码ID | 错误信息                                                                                                        |
129|-------|-------------------------------------------------------------------------------------------------------------|
130| 202   | Permission verification failed. A non-system application calls a system API.                                |
131| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
132
133**示例:**
134
135```ts
136import { BusinessError } from '@kit.BasicServicesKit';
137
138let options: systemTimer.TimerOptions = {
139  type: systemTimer.TIMER_TYPE_REALTIME,
140  repeat:false
141};
142try {
143  systemTimer.createTimer(options).then((timerId: Number) => {
144    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
145  }).catch((error: BusinessError) => {
146    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
147  });
148} catch(e) {
149  let error = e as BusinessError;
150  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
151}
152```
153
154## systemTimer.startTimer
155
156startTimer(timer: number, triggerTime: number, callback: AsyncCallback&lt;void&gt;): void
157
158开启定时器,使用callback异步回调。
159
160**系统能力:** SystemCapability.MiscServices.Time
161
162**参数:**
163
164| 参数名      | 类型                   | 必填 | 说明                                                                                                                                                                                                                                                           |
165| ----------- | ---------------------- | ---- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
166| timer       | number                 | 是   | 定时器的ID。                                                                                                                                                                                                                                                      |
167| triggerTime | number                 | 是   | 定时器的触发时间,单位:毫秒。<br/>若定时器类型包含了TIMER_TYPE_REALTIME,该triggerTime应为系统启动时间,建议通过[systemDateTime.getUptime(STARTUP)](js-apis-date-time.md#systemdatetimegetuptime10)获取;<br/>若定时器类型不包含TIMER_TYPE_REALTIME,该triggerTime应为墙上时间,建议通过[systemDateTime.getTime()](js-apis-date-time.md#systemdatetimegettime10)获取。 |
168| callback    | AsyncCallback&lt;void> | 是   | 回调函数。                                                                                                                                                                                                                                                        |
169
170**错误码:**
171
172以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
173
174| 错误码ID | 错误信息                                                                                                        |
175|-------|-------------------------------------------------------------------------------------------------------------|
176| 202   | Permission verification failed. A non-system application calls a system API.                                |
177| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
178
179**示例:**
180
181```ts
182import { BusinessError } from '@kit.BasicServicesKit';
183
184let options: systemTimer.TimerOptions = {
185  type: systemTimer.TIMER_TYPE_REALTIME,
186  repeat:false
187}
188let triggerTime = new Date().getTime();
189triggerTime += 3000;
190
191try {
192  systemTimer.createTimer(options).then((timerId: number) => {
193    systemTimer.startTimer(timerId, triggerTime, (error: BusinessError) => {
194      if (error) {
195        console.error(`Failed to start timer. message: ${error.message}, code: ${error.code}`);
196        return;
197      }
198      console.info(`Succeeded in starting timer.`);
199    });
200    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
201  }).catch((error: BusinessError) => {
202    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
203  });
204} catch(e) {
205  let error = e as BusinessError;
206  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
207}
208```
209
210## systemTimer.startTimer
211
212startTimer(timer: number, triggerTime: number): Promise&lt;void&gt;
213
214开启定时器,使用Promise进行异步回调。
215
216**系统能力:** SystemCapability.MiscServices.Time
217
218**参数:**
219
220| 参数名      | 类型   | 必填 | 说明                                                                                                                                                                                                                                                           |
221| ----------- | ------ | ---- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
222| timer       | number | 是   | 定时器的ID。                                                                                                                                                                                                                                                      |
223| triggerTime | number | 是   | 定时器的触发时间,单位:毫秒。<br/>若定时器类型包含了TIMER_TYPE_REALTIME,该triggerTime应为系统启动时间,建议通过[systemDateTime.getUptime(STARTUP)](js-apis-date-time.md#systemdatetimegetuptime10)获取;<br/>若定时器类型不包含TIMER_TYPE_REALTIME,该triggerTime应为墙上时间,建议通过[systemDateTime.getTime()](js-apis-date-time.md#systemdatetimegettime10)获取。 |
224
225**返回值:**
226
227| 类型           | 说明                      |
228| -------------- | ------------------------- |
229| Promise\<void> | 无返回结果的Promise对象。 |
230
231**错误码:**
232
233以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
234
235| 错误码ID | 错误信息                                                                                                        |
236|-------|-------------------------------------------------------------------------------------------------------------|
237| 202   | Permission verification failed. A non-system application calls a system API.                                |
238| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
239
240**示例:**
241
242```ts
243import { BusinessError } from '@kit.BasicServicesKit';
244
245let options: systemTimer.TimerOptions = {
246  type: systemTimer.TIMER_TYPE_REALTIME,
247  repeat:false
248}
249let triggerTime = new Date().getTime();
250triggerTime += 3000;
251
252try {
253  systemTimer.createTimer(options).then((timerId: number) => {
254    systemTimer.startTimer(timerId, triggerTime).then(() => {
255      console.info(`Succeeded in starting timer.`);
256    }).catch((error: BusinessError) => {
257      console.error(`Failed to start timer. message: ${error.message}, code: ${error.code}`);
258    });
259    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
260  }).catch((error: BusinessError) => {
261    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
262  });
263} catch(e) {
264  let error = e as BusinessError;
265  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
266}
267```
268
269## systemTimer.stopTimer
270
271stopTimer(timer: number, callback: AsyncCallback&lt;void&gt;): void
272
273该方法停止定时器,并使用callback进行异步回调。
274
275**系统能力:** SystemCapability.MiscServices.Time
276
277**参数:**
278
279| 参数名   | 类型                   | 必填 | 说明         |
280| -------- | ---------------------- | ---- | ------------ |
281| timer    | number                 | 是   | 定时器的ID。 |
282| callback | AsyncCallback&lt;void> | 是   | 回调函数。   |
283
284**错误码:**
285
286以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
287
288| 错误码ID | 错误信息                                                                                                        |
289|-------|-------------------------------------------------------------------------------------------------------------|
290| 202   | Permission verification failed. A non-system application calls a system API.                                |
291| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
292
293**示例:**
294
295```ts
296import { BusinessError } from '@kit.BasicServicesKit';
297
298let options: systemTimer.TimerOptions = {
299  type: systemTimer.TIMER_TYPE_REALTIME,
300  repeat:false
301}
302let triggerTime = new Date().getTime();
303triggerTime += 3000;
304
305try {
306  systemTimer.createTimer(options).then((timerId: number) => {
307    systemTimer.startTimer(timerId, triggerTime);
308    systemTimer.stopTimer(timerId, (error: BusinessError) => {
309      if (error) {
310        console.error(`Failed to stop timer. message: ${error.message}, code: ${error.code}`);
311        return;
312      }
313    console.info(`Succeeded in stopping timer.`);
314    });
315    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
316  }).catch((error: BusinessError) => {
317    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
318  });
319} catch(e) {
320  let error = e as BusinessError;
321  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
322}
323```
324
325## systemTimer.stopTimer
326
327stopTimer(timer: number): Promise&lt;void&gt;
328
329此方法用于停止定时器,并使用Promise异步回调。
330
331**系统能力:** SystemCapability.MiscServices.Time
332
333**参数:**
334
335| 参数名 | 类型   | 必填 | 说明         |
336| ------ | ------ | ---- | ------------ |
337| timer  | number | 是   | 定时器的ID。 |
338
339**返回值:**
340
341| 类型           | 说明                      |
342| -------------- | ------------------------- |
343| Promise\<void> | 无返回结果的Promise对象。 |
344
345**错误码:**
346
347以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
348
349| 错误码ID | 错误信息                                                                                                        |
350|-------|-------------------------------------------------------------------------------------------------------------|
351| 202   | Permission verification failed. A non-system application calls a system API.                                |
352| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
353
354**示例:**
355
356```ts
357import { BusinessError } from '@kit.BasicServicesKit';
358
359let options: systemTimer.TimerOptions = {
360  type: systemTimer.TIMER_TYPE_REALTIME,
361  repeat:false
362}
363let triggerTime = new Date().getTime();
364triggerTime += 3000;
365
366try {
367  systemTimer.createTimer(options).then((timerId: number) => {
368    systemTimer.startTimer(timerId, triggerTime);
369    systemTimer.stopTimer(timerId).then(() => {
370      console.info(`Succeeded in stopping timer.`);
371    }).catch((error: BusinessError) => {
372      console.error(`Failed to stop timer. message: ${error.message}, code: ${error.code}`);
373    });
374    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
375  }).catch((error: BusinessError) => {
376    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
377  });
378} catch(e) {
379  let error = e as BusinessError;
380  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
381}
382```
383
384## systemTimer.destroyTimer
385
386destroyTimer(timer: number, callback: AsyncCallback&lt;void&gt;): void
387
388销毁定时器,使用callback异步回调。
389
390**系统能力:** SystemCapability.MiscServices.Time
391
392**参数:**
393
394| 参数名   | 类型                   | 必填 | 说明         |
395| -------- | ---------------------- | ---- | ------------ |
396| timer    | number                 | 是   | 定时器的ID。 |
397| callback | AsyncCallback&lt;void> | 是   | 回调函数。   |
398
399**错误码:**
400
401以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
402
403| 错误码ID | 错误信息                                                                                                        |
404|-------|-------------------------------------------------------------------------------------------------------------|
405| 202   | Permission verification failed. A non-system application calls a system API.                                |
406| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
407
408**示例:**
409
410```ts
411import { BusinessError } from '@kit.BasicServicesKit';
412
413let options: systemTimer.TimerOptions = {
414  type: systemTimer.TIMER_TYPE_REALTIME,
415  repeat:false
416}
417let triggerTime = new Date().getTime();
418triggerTime += 3000;
419
420try {
421  systemTimer.createTimer(options).then((timerId: number) => {
422    systemTimer.startTimer(timerId, triggerTime);
423    systemTimer.stopTimer(timerId);
424    systemTimer.destroyTimer(timerId, (error: BusinessError) => {
425      if (error) {
426        console.error(`Failed to destroy timer. message: ${error.message}, code: ${error.code}`);
427        return;
428      }
429    console.info(`Succeeded in destroying timer.`);
430    });
431    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
432  }).catch((error: BusinessError) => {
433    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
434  });
435} catch(e) {
436  let error = e as BusinessError;
437  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
438}
439```
440
441## systemTimer.destroyTimer
442
443destroyTimer(timer: number): Promise&lt;void&gt;
444
445销毁定时器,使用Promise进行异步回调。
446
447**系统能力:** SystemCapability.MiscServices.Time
448
449**参数:**
450
451| 参数名 | 类型   | 必填 | 说明         |
452| ------ | ------ | ---- | ------------ |
453| timer  | number | 是   | 定时器的ID。 |
454
455**返回值:**
456
457| 类型           | 说明                      |
458| -------------- | ------------------------- |
459| Promise\<void> | 无返回结果的Promise对象。 |
460
461**错误码:**
462
463以下错误码的详细介绍请参见[时间时区错误码](./errorcode-time.md)。
464
465| 错误码ID | 错误信息                                                                                                        |
466|-------|-------------------------------------------------------------------------------------------------------------|
467| 202   | Permission verification failed. A non-system application calls a system API.                                |
468| 401   | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
469
470**示例:**
471
472```ts
473import { BusinessError } from '@kit.BasicServicesKit';
474
475let options: systemTimer.TimerOptions = {
476  type: systemTimer.TIMER_TYPE_REALTIME,
477  repeat:false
478}
479let triggerTime = new Date().getTime();
480triggerTime += 3000;
481
482try {
483  systemTimer.createTimer(options).then((timerId: number) => {
484    systemTimer.startTimer(timerId, triggerTime);
485    systemTimer.stopTimer(timerId);
486    systemTimer.destroyTimer(timerId).then(() => {
487      console.info(`Succeeded in destroying timer.`);
488    }).catch((error: BusinessError) => {
489      console.error(`Failed to destroy timer. message: ${error.message}, code: ${error.code}`);
490    });
491    console.info(`Succeeded in creating timer. timerId: ${timerId}`);
492  }).catch((error: BusinessError) => {
493    console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
494  });
495} catch(e) {
496  let error = e as BusinessError;
497  console.error(`Failed to create timer. message: ${error.message}, code: ${error.code}`);
498}
499```