Androidの長期的なバックグラウンドスレッド

ブライアン・ヒューイットソン

私は最初のAndroidアプリケーションを作成するプログラマーです。

C#では、通常、達成しようとしていることにThreadWorkerクラスを使用します。

このアプリケーションは、クラス内の変数に基づいて毎秒更新する必要がある一連のテキストボックスで構成されています。更新を行うループを含むバックグラウンドスレッドを開始できるようにしたい。

私が使用しているコードを以下に示します。ループを終了すると更新を1回実行できますが、これを実行しないとGUIが応答しなくなります(ロックアップします)。コードがバックグラウンドで実行されていないと思います。現在、Runnableを使用してこれを試していますが、AsyncTaskまたはExecutorを確認する場合もあります。

package com.example.redkatipo.myfirstapp;

import android.os.*;

import java.util.List;

/**
 * Created by Brian on 6/04/2015.
*/


class GroupTimerWorker implements Runnable {
Boolean _stopping = false;
Boolean _stopped = false;
Boolean _paused = false;
List<TimerLine> _lines;

public GroupTimerWorker(List<TimerLine> lines) {
    _lines = lines;
}

public void Stop() {
    _stopping = true;
}

public void SetPaused(Boolean pause) {
    _paused = pause;
}


@Override
public void run() {
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUN    D);
    while (!_stopping) {
        try {
            Thread.sleep(1000);
            if (!_paused) {
                updateAllTimers();
            }
        } catch (InterruptedException e) {

            e.printStackTrace();
        }
       _stopping = true;
    }

}




public synchronized void updateAllTimers() {

    for (int i = 0; i < _lines.size(); i++) {
        TimerLine tl = _lines.get(i);
        if (tl._isRunning) {
            tl.SetCurrentDuration();
        }
    }
}

}

public void updateAllTimers(View view) {
   _groupTimerWorker = new GroupTimerWorker(_displayLines);
   new Thread (_groupTimerWorker).run();


}


package com.example.redkatipo.myfirstapp;

import android.content.Context;
import android.os.SystemClock;
import android.content.res.Resources;
import android.text.method.BaseKeyListener;
import android.widget.TextView;
import android.widget.Button;

/**
 * Created by Brian on 27/03/2015.
 */

パブリッククラスTimerLine {

public Context _context;
public Button _stopStart;
TextView _person;
public TextView _elapsed;
boolean _isRunning;

int _startTime = 0;
int _currentTime = 0;
int _previousTime = 0;

public TimerLine(Context context, Button _control, TextView _id, TextView _output) {
    _context = context;

    _stopStart = _control;

    _person = _id;
    _elapsed = _output;
    _isRunning = false;
    _stopStart.setTag(this);

    _elapsed.setText("idle");
}

private int CurrentSeconds()
{
    return (int)(SystemClock.uptimeMillis()/1000);
}

public void stopStartButtonClick()
{
    if (_isRunning == false) {
        _isRunning = true;
       // _stopStart.setBackground(_context.getResources().getDrawable(R.drawable.red_button));
        _stopStart.setText("Stop");

        _elapsed.setBackground(_context.getResources().getDrawable(R.drawable.green_button));
        _previousTime = _previousTime + _currentTime - _startTime;
        _elapsed.setText(formatTime(_previousTime));

        _startTime = CurrentSeconds();
    } else {
        _isRunning = false;
       /// _stopStart.setBackground(_context.getResources().getDrawable(R.drawable.green_button));
        _stopStart.setText("Start");
        _currentTime = CurrentSeconds();
        int difference = (_currentTime - _startTime);
        int totalTime = difference + _previousTime;
        _elapsed.setText(formatTime(totalTime));
        _elapsed.setBackground(_context.getResources().getDrawable(R.drawable.red_button));

    }

}

public void SetCurrentDuration()
{
    int now = CurrentSeconds();
    int difference = now - _startTime;
   int totalTime = difference + _previousTime;
    _elapsed.setText(formatTime(totalTime));
}

private String formatTime(int totalTime)
{
    int minutes = totalTime/60;
    int seconds = totalTime % 60;
    return "" + minutes + ":" + String.format("%02d", seconds);
}

}

コウシック

Androidでは、これを行う方法がいくつかあります。しかし、私は以下のプロセスを好みます。

class Yourclass{
     Runnable mRunnable ;
     int x=1;//number of sec

     private void AnyFunction( ) {
        mRunnable = new Runnable() {
        @Override
        public void run() {
               <create a handler here say myhandler>
        //Optional if you want to start the first call af 'x' sec
             myhandler.postDelayed(mRunnable, x * 1000);
        }
    };

}
 private final Handler myhandler= new Handler() {


    @Override
    public void handleMessage(Message msg) {
          switch (msg.what) {
        case ans1:
             {
                <your code to change update ui etc>

                  myhandler.postDelayed(mRunnable, x * 1000);

               break;
             }

    }

   /*How to call this from any function wher you need to call the interval                     if oncreate the on creat call method AnyFunction*/

    AnyFunction();

}

これがお役に立てば幸いです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Androidのバックグラウンドスレッド

分類Dev

Realm の長期間存続するバックグラウンド インスタンス

分類Dev

Xamarin.formsの長期にわたるバックグラウンド作業

分類Dev

進行状況の通知を伴う長期実行のバックグラウンドタスク

分類Dev

バックグラウンドサービスAndroidのスレッド

分類Dev

ScanCallbackのバックグラウンドスレッド

分類Dev

処理中のバックグラウンドスレッド

分類Dev

ZeroMQバックグラウンドスレッドの作成

分類Dev

バックグラウンドスレッドでのKotlinrunBlocking

分類Dev

GAEPythonバックグラウンドスレッドの終了

分類Dev

Javaのバックグラウンドスレッド

分類Dev

バックグラウンドとGCのエンドレススレッド

分類Dev

バックグラウンドスレッドのクラッシュ

分類Dev

Android-バックグラウンドスレッドのガベージコレクション

分類Dev

UIがバックグラウンドスレッドから更新されるのになぜこれほど長い時間がかかるのですか?

分類Dev

オーバーレイの追加中にバックグラウンドスレッドが機能しない

分類Dev

Androidバックグラウンドサービスのレルム

分類Dev

Androidのラウンドエッジプログレスバー

分類Dev

CocoaLumberjackがiOSのバックグラウンドスレッドにログオンしない

分類Dev

ウィンドウなしのバックグラウンドプロセス

分類Dev

バックグラウンドスレッドでのレルムの不正な動作

分類Dev

複数の長時間実行バックグラウンドタスク

分類Dev

androidスレッドとハンドラー-バックグラウンドスレッドからのUIオブジェクトの変更

分類Dev

迅速な3のバックグラウンドタスク

分類Dev

バックグラウンドサービスのAndroidのgetContext

分類Dev

バックグラウンドスレッドとしてのウォッチドッグ-Python

分類Dev

forループスポーン(バックグラウンド)スレッドでの奇妙な動作

分類Dev

バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

分類Dev

UIスレッドでのバックグラウンドスレッドの進行状況のレポート

Related 関連記事

  1. 1

    Androidのバックグラウンドスレッド

  2. 2

    Realm の長期間存続するバックグラウンド インスタンス

  3. 3

    Xamarin.formsの長期にわたるバックグラウンド作業

  4. 4

    進行状況の通知を伴う長期実行のバックグラウンドタスク

  5. 5

    バックグラウンドサービスAndroidのスレッド

  6. 6

    ScanCallbackのバックグラウンドスレッド

  7. 7

    処理中のバックグラウンドスレッド

  8. 8

    ZeroMQバックグラウンドスレッドの作成

  9. 9

    バックグラウンドスレッドでのKotlinrunBlocking

  10. 10

    GAEPythonバックグラウンドスレッドの終了

  11. 11

    Javaのバックグラウンドスレッド

  12. 12

    バックグラウンドとGCのエンドレススレッド

  13. 13

    バックグラウンドスレッドのクラッシュ

  14. 14

    Android-バックグラウンドスレッドのガベージコレクション

  15. 15

    UIがバックグラウンドスレッドから更新されるのになぜこれほど長い時間がかかるのですか?

  16. 16

    オーバーレイの追加中にバックグラウンドスレッドが機能しない

  17. 17

    Androidバックグラウンドサービスのレルム

  18. 18

    Androidのラウンドエッジプログレスバー

  19. 19

    CocoaLumberjackがiOSのバックグラウンドスレッドにログオンしない

  20. 20

    ウィンドウなしのバックグラウンドプロセス

  21. 21

    バックグラウンドスレッドでのレルムの不正な動作

  22. 22

    複数の長時間実行バックグラウンドタスク

  23. 23

    androidスレッドとハンドラー-バックグラウンドスレッドからのUIオブジェクトの変更

  24. 24

    迅速な3のバックグラウンドタスク

  25. 25

    バックグラウンドサービスのAndroidのgetContext

  26. 26

    バックグラウンドスレッドとしてのウォッチドッグ-Python

  27. 27

    forループスポーン(バックグラウンド)スレッドでの奇妙な動作

  28. 28

    バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

  29. 29

    UIスレッドでのバックグラウンドスレッドの進行状況のレポート

ホットタグ

アーカイブ