Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • Android. Thread - потоки

    Android in AppleПрограмма , несмотря на то что может прыгать с одного места кода в другое - исполняется построчно и линейно. Если в программе происходит некоторый процесс (воспроизведение музыки, видео, или выполнение каких то расчетов) невозможно повлиять но ход события со стороны, пока не дойдет до конца этот действующий процесс. В таких случаях используют - многопоточность. Поток - это и есть линейное выполнение программы. Если нужно в приложении организовать несколько независимых векторов выполнения кода - создают такое же количество потоков, которые параллельно выполняют свою задачу и могут влиять друг на друга.
    Класс Thread создает нужный дополнительный независимый поток и принимает в своем конструкторе объект Runnable , в котором указывается нужное действие. Третий важный класс в работе с потоками это Handler, он есть связующим звеном с помощью которого разные потоки могут влиять друг на друга. Без Handler, поток который например, отсчитывает время, не смог бы отправить состояние своего счетчика любому объекту из главного потока программы, в котором созданы методы для изображения результатов на дисплее.
    В данном примере программы показана работа простого таймера отсчитывающего время до нуля. Доказательством "параллельности" будет тот факт, что в любой момент, пока счетчик не досчитал до конца, есть возможность начать отсчитывание сначала, нажав кнопку стоп:

    import android.os.Handler;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {
    Handler h;
    int i=1000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button playButton = (Button) findViewById(R.id.play);
    Button stopButton = (Button) findViewById(R.id.stop);
    final TextView textView = (TextView)findViewById(R.id.textView);

    h = new Handler() {
    public void handleMessage(android.os.Message msg) {

    textView.setText(msg.what);
    };
    };

    final Runnable runaudio = new Runnable() {
    public void run() {
    while(i>0) {
    for (int i = 0; i < 1000000; i++) {
    }
    h.sendEmptyMessage(i);
    i--;
    }
    }};


    playButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view){

    Thread myThread = new Thread(runaudio);

    myThread.start();
    }
    });

    stopButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view){
    i=1000;
    }
    });

    }
    } }


    Читайте больше в категории: Mobil App

    2016-08-10 19:28:39



    Другие статьи:

    Рисунок. Техники рисования

    WEB Разработка

    Maya. Освещение

    Физика цвета в живописи

    Java. Перегрузка методов и конструктров

    Maya. Операция Fill Hole

    Рисунок. Деревья

    STM32. Регистры портов GPIO

    Java. Создание графических приложений

    Як насправді виглядав Невицький Замок