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

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

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

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

Q&A

2回答

794閲覧

スマホの画面を消していても動作可能な処理の書き方を教えてください

kpfc

総合スコア7

Android

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

0グッド

0クリップ

投稿2018/04/27 10:13

前提・実現したいこと

スマホの画面を消していても動作可能な処理を書く
test2メソッドを1秒ごとに実行させたい
可能ならその1秒という値はfinalな値ではなくどこかから取得したい

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

スマホの画面を消して10秒ぐらいで止まってしまいます

該当のソースコード

public int i = 0;
void test1() {
new Thread(new Runnable() {
public void run(){
while(i++ < 5000){
test2();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}

可能なら以下のようにしたいです
待ち時間を固定したくないということです

public int i = 0;
void test1() {
new Thread(new Runnable() {
public void run(){
while(i++ < 5000){
test2();
try {
Thread.sleep(getTestWaitTime());
} catch (InterruptedException e) {
}
}
}
}

試したこと

Android7のスマホで試しました

補足情報(FW/ツールのバージョンなど)

スマホの画面を消して10秒ぐらいで完全に止まるのではなくて
5分か10分ぐらいで突然続きが動いたりしますがまたすぐに止まります

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

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

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

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

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

Do_you_1isten

2018/04/27 10:34

5000の値を弄ったりしても変化はありませんか?
kpfc

2018/04/27 10:42

はい。
kpfc

2018/04/27 10:42

5000を8に変えてスマホの画面をつけたままテストすると
kpfc

2018/04/27 10:42

8秒ぐらいで止まりましたので、その秒の値は正しく動作します。
kpfc

2018/04/27 10:42

8にしたままスマホの画面を消すと5秒ぐらいで止まりました。
kpfc

2018/04/27 10:42

10秒ぐらいで止まると書きましたが5秒ぐらいでした。
kpfc

2018/04/27 10:42

画面を消すと5秒ぐらいで止まってしまいます。
kpfc

2018/04/27 10:42

5000がミリ秒単位であることは自覚しています。
kpfc

2018/04/27 10:45

5000は間違いでした。1000の方がミリ秒単位であることは自覚しています。
Do_you_1isten

2018/04/27 11:03

スマホをつけている時と消してる時でwhile内のiの値から挙動を確認してみて、どのタイミングでおかしくなるか確認してみてはどうでしょう?
kpfc

2018/04/27 11:27

画面を消すと1秒ごとのループは5秒後ぐらいに止まります。
kpfc

2018/04/27 11:27

再び画面をつけると、ループは再開されます。
kpfc

2018/04/27 11:27

その時、カウンタiの値は引き継がれていました。
guest

回答2

0

stopService(intent);

startServiceの間違いかと思いますが。
あと、IntentServiceというのもあるので、そちらも試してみてください。

投稿2018/04/30 14:25

py4s-tnk

総合スコア201

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

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

0

おそらくActivityで実装しているからだと思うのですが、
androidでバックグランドな処理を記述するところは、Serviceになるはず。

投稿2018/04/28 10:49

py4s-tnk

総合スコア201

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

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

kpfc

2018/04/30 08:02

Serviceを使ってみましたが改善しませんでした。 Serviceの使い方が悪いのでしょうか? MainActivityは以下のようにしてServiceを起動させます。 Intent intent = new Intent(MainActivity.this, BackgroundServiceTest.class); stopService(intent); Service自体は以下のようにしました。 public class BackgroundServiceTest extends Service { public int i = 0; @Override public int onStartCommand(Intent intent, int flags, int startId){ test1(); return Service.START_STICKY; } public IBinder onBindは意味が分からなかったのでreturn null;させました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問