728x90
스레드
- 배경 음악이 플레이 되면서 동시에 액티비티 화면의 사용자 인터페이스 조작 작업
- 실행과정에서 서로 영향을 미치지 않고 독립적으로 수행되는 작업에 대해서만 사용
- 각각의 프로세서가 서로 다른 작업 → 동시 진행
new Thread() {
public void run() {
// 이 부분에 작업을 코딩
}
}.start();
// new로 표현된 객체를 만드는 순간 thread가 실행
- 일반적 스레드 : 스레드 안에서 필요한 내용을 계산하는 것만 가능
- UI 스레드 : 화면의 위젯 내용 변경 가능
runOnUiThread(new Runnable() {
public void run() {
// 위젯을 변경하는 작업 프로그램
}
};
실습1
- SeekBar에서 현재의 진행 상황을 서로 다르게 진행하도록 해주는 작업
public class MainActivity extends AppCompatActivity {
ProgressBar myseekbar1, myseekbar2;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myseekbar1 = (ProgressBar)findViewById(R.id.seekBar);
myseekbar2 = (ProgressBar)findViewById(R.id.seekBar2);
btn = (Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread() {
public void run() {
for(int i= myseekbar1.getProgress(); i<100; i+=2) {
myseekbar1.setProgress(myseekbar1.getProgress() + 2);
SystemClock.sleep(100); // for 문 반복 전 잠시 쉬었다가 진행
}
}
}.start();
new Thread() {
public void run() {
for(int i=myseekbar2.getProgress(); i< 100 ; i ++) {
myseekbar2.setProgress(myseekbar2.getProgress() + 1);
SystemClock.sleep(100);
}
}
}.start();
}
});
}
}
실습 2
- 실습 1 내용의 위젯 내용을 변경 → UI 스레드 사용
public class MainActivity extends AppCompatActivity {
ProgressBar myseekbar1, myseekbar2;
Button btn;
TextView tv1, tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myseekbar1 = (ProgressBar)findViewById(R.id.seekBar);
myseekbar2 = (ProgressBar)findViewById(R.id.seekBar2);
btn = (Button)findViewById(R.id.button);
tv1 = (TextView)findViewById(R.id.textView);
tv2 = (TextView)findViewById(R.id.textView2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread() {
public void run() {
for(int i= myseekbar1.getProgress(); i<100; i+=2) {
runOnUiThread(new Runnable() {
@Override
public void run() {
myseekbar1.setProgress(myseekbar1.getProgress() +2);
tv1.setText("1번 SeekBar 진행률 : " + myseekbar1.getProgress() + "%");
}
});
SystemClock.sleep(100); // for 문 반복 전 잠시 쉬었다가 진행
}
}
}.start();
new Thread() {
public void run() {
for(int i=myseekbar2.getProgress(); i< 100 ; i ++) {
runOnUiThread(new Runnable() {
@Override
public void run() {
myseekbar2.setProgress(myseekbar2.getProgress() + 1);
tv2.setText("2번 SeekBar 진행률 : "+ myseekbar2.getProgress() + "%");
}
});
SystemClock.sleep(100);
}
}
}.start();
}
});
}
}
728x90
'Android Programming' 카테고리의 다른 글
[Mobile Programming] 어댑터 뷰 (0) | 2021.12.17 |
---|---|
[Mobile Programming] 데이터 관리 및 파일처리 (0) | 2021.12.13 |
[Android Programming] 카메라 영상 캡처 (0) | 2021.12.05 |
[Mobile Programming] 방송 수신자 (0) | 2021.12.04 |
[Mobile Programming] 서비스 (0) | 2021.11.20 |