質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

3096閲覧

Android AlarmManagerの定期処理

xxx8

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/11/10 04:44

###環境
Android Studio2.3.3
SDK 7.1
API 25

###前提・実現したいこと
AlarmManagerで定期的にServiceを起動させたいです。

###発生している問題・エラーメッセージ

端末の電源が入ったタイミングで

BootRecieverクラスから3秒毎にServiceを起動させているのですが
serviceの処理が終わってから次回Serviceが呼ばれるまで約1分のタイムラグが発生します。

Android5.1ではこのタイムラグが起きなかったので
7.1の仕様なのかなと思い調べてみましたが分かりません。

###該当のソースコード

public void onReceive(Context context, Intent intent) { //端末起動時にサービス起動 if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { Intent it = new Intent(context, DeleteService.class); int requestCode = 1; PendingIntent pendingIntent = PendingIntent.getService (context, requestCode, it, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 3 * 1000, pendingIntent); } }

###調べたこと

Service内の処理は平均して20ミリ秒ほどでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

AlarmManagerによるとバッテリーの消費を抑えるためにAPI 19以降から仕様が変更されています。
従来の実装では厳密な配信はできず、setWindowやsetExactを使うといいようですね。

投稿2017/11/10 06:09

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Android5.1ではこのタイムラグが起きなかったので

7.1の仕様なのかなと思い調べてみましたが分かりません。

API 19なのでかなり前からsetRepeating()のタイミングは緩くなっています。
リンク内容

理由はバッテリー消費を抑えたいためです

setの場合はsetExact()あるいはsetWindow()を使えるので精度を良くできますが
setRepeating()にはありません

API 25
であれば、ServiceでsetExact()を繰り返させることができます

ただしAndroid 8.0からは多分できないでしょう
Backgroundでの挙動が制限されるので
リンク内容

回避策はJobSchejulerかな

投稿2017/11/10 06:04

編集2017/11/10 06:05
aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2017/11/10 06:15

とりあえずはAPI 25の端末のみをターゲットとするので ServiceでsetExact()を繰り返すという方法を探してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問