class MainActivity
package com.example.choi.mystudy22;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View v){
Intent intent=null;
switch (v.getId()){
case R.id.button1:
intent=new Intent(MainActivity.this, SampleOneActivity.class);
break;
case R.id.button2:
intent=new Intent(MainActivity.this, SampleTwoActivity.class);
break;
case R.id.button3:
intent=new Intent(MainActivity.this, SampleThreeActivity.class);
break;
}
startActivity(intent);
}
}
R.layout.activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.mystudy22.MainActivity">
<Button
android:text="스레드클래스 분리"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:background="@android:color/holo_blue_dark"
android:textColor="@android:color/background_light"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textStyle="normal|bold"
android:onClick="onClick"
/>
<Button
android:text="루퍼(Looper)"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="54dp"
android:id="@+id/button2"
android:background="@android:color/holo_green_light"
android:layout_below="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textColor="@android:color/background_light"
android:onClick="onClick"
/>
<Button
android:text="ANR - 메시지 큐를 이용한 작업 시간 조정"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button3"
android:background="@android:color/holo_orange_dark"
android:textColor="@android:color/background_light"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="onClick"
/>
</RelativeLayout>
class SampleOneActivity
package com.example.choi.mystudy22;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class SampleOneActivity extends AppCompatActivity {
final static String TAG ="MainActivity";
private int mainNum;
private int secondNum;
private TextView tvMain, tvSecond;
private Button btnStart, stopBtn;
public static boolean IS_THREAD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_one);
tvMain=(TextView)findViewById(R.id.tv_main_thread);
tvSecond=(TextView)findViewById(R.id.tv_second_thread);
btnStart=(Button)findViewById(R.id.bt_start);
stopBtn=(Button)findViewById(R.id.stopBtn);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startNum();
}
});
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IS_THREAD=false;
Toast.makeText(SampleOneActivity.this, "스레드 종료", Toast.LENGTH_SHORT).show();
}
});
}
private void startNum(){
mainNum++;
tvMain.setText("mainNum : " + mainNum);
IS_THREAD=true;
NewThread thread =new NewThread(mainHandler, secondNum);
thread.setDaemon(true);
thread.start();
}
Handler mainHandler =new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==NewThread.NETHREAD_WHAT){
secondNum=msg.arg1;
tvSecond.setText("secondNum : " + secondNum);
Log.i(TAG, "secondNum in handler : " + secondNum);
}
}
};
}
class NewThread
package com.example.choi.mystudy22;
import android.os.Handler;
import android.os.Message;
/**
* Created by choi on 2017-03-09.
*/
public class NewThread extends Thread {
final static int NETHREAD_WHAT=0;
private Handler handler;
private int secondNum;
public NewThread(Handler handler, int sn){
this.handler=handler;
this.secondNum=sn;
}
@Override
public void run() {
while (SampleOneActivity.IS_THREAD){
secondNum++;
Message msg =Message.obtain();
msg.what=NETHREAD_WHAT;
msg.arg1=secondNum;
handler.sendMessage(msg);
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
R.layout.sample_one
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sample_one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.mystudy22.SampleOneActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_main_thread"
android:layout_alignParentTop="true"
android:layout_marginTop="33dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textSize="30sp"
android:textStyle="normal|bold"
android:textAlignment="center"
android:textColor="@android:color/holo_blue_dark" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_main_thread"
android:layout_centerHorizontal="true"
android:layout_marginTop="112dp"
android:id="@+id/tv_second_thread"
android:textSize="30sp"
android:textAlignment="center"
android:textStyle="normal|bold"
android:textColor="@android:color/holo_red_dark" />
<Button
android:text="Start Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="87dp"
android:id="@+id/bt_start"
android:textAllCaps="false"
android:background="@android:color/holo_green_light"
android:textColor="@android:color/background_light" />
<Button
android:text="스레드 멈춤"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/stopBtn"
android:background="@android:color/holo_red_dark"
android:textColor="@android:color/background_light" />
</RelativeLayout>
class SampleTwoActivity
package com.example.choi.mystudy22;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class SampleTwoActivity extends AppCompatActivity {
TextView tvSound;
Button btnPiano, btnGuitar, btnDrum;
InstrumentSound instrumentSound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_two);
tvSound=(TextView)findViewById(R.id.tv_sound);
btnPiano=(Button)findViewById(R.id.bt_conversion_piano);
btnGuitar=(Button)findViewById(R.id.bt_conversion_guitar);
btnDrum=(Button)findViewById(R.id.bt_conversion_drum);
btnPiano.setOnClickListener(listener);
btnGuitar.setOnClickListener(listener);
btnDrum.setOnClickListener(listener);
instrumentSound=new InstrumentSound(mHandler);
instrumentSound.setDaemon(true);
instrumentSound.start();
}
Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
String str ="";
switch (msg.what){
case InstrumentSound.SOUND_PIANO:
Toast.makeText(SampleTwoActivity.this, "피아노소리로 전환 완료", Toast.LENGTH_SHORT).show();
str=(String)msg.obj;
break;
case InstrumentSound.SOUND_GUITAR:
Toast.makeText(SampleTwoActivity.this, "기타소리로 전환 완료", Toast.LENGTH_SHORT).show();
str =(String)msg.obj;
break;
case InstrumentSound.SOUND_DRUM:
Toast.makeText(SampleTwoActivity.this, "드럼소리로 전환 완료", Toast.LENGTH_SHORT).show();
str=(String)msg.obj;
break;
}
tvSound.setText(str);
}
};
View.OnClickListener listener=new View.OnClickListener() {
Message msg;
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_conversion_piano:
msg =Message.obtain();
msg.what=InstrumentSound.SOUND_PIANO;
break;
case R.id.bt_conversion_guitar:
msg=Message.obtain();
msg.what=InstrumentSound.SOUND_GUITAR;
break;
case R.id.bt_conversion_drum:
msg=Message.obtain();
msg.what=InstrumentSound.SOUND_DRUM;
break;
}
instrumentSound.getHandler().sendMessage(msg);
}
};
}
R.layout.sample_two
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sample_two"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.mystudy22.SampleTwoActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_sound"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:textSize="30sp"
android:textColor="@android:color/holo_green_dark"
android:textAlignment="center" />
<Button
android:text="드럼"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/bt_conversion_guitar"
android:layout_centerHorizontal="true"
android:layout_marginTop="39dp"
android:id="@+id/bt_conversion_drum"
android:background="@android:color/holo_green_light"
android:textColor="@android:color/background_light" />
<Button
android:text="피아노"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="127dp"
android:id="@+id/bt_conversion_piano"
android:layout_below="@+id/tv_sound"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@android:color/holo_blue_dark"
android:textColor="@android:color/background_light" />
<Button
android:text="기타"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="39dp"
android:id="@+id/bt_conversion_guitar"
android:layout_below="@+id/bt_conversion_piano"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@android:color/holo_orange_dark"
android:textColor="@android:color/background_light" />
</RelativeLayout>
class SampleThreeActivity
package com.example.choi.mystudy22;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class SampleThreeActivity extends AppCompatActivity {
final static String TAG ="SampleThreeActivity";
final static int ALL_DELETE =0;
Button btnDelete, btn01, btn02;
Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_three);
btnDelete=(Button)findViewById(R.id.bt_delete);
btn01=(Button)findViewById(R.id.bt_01);
btn02=(Button)findViewById(R.id.bt_02);
btnDelete.setOnClickListener(listener);
btn01.setOnClickListener(listener);
btn02.setOnClickListener(listener);
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case ALL_DELETE:
allDataDelete();
break;
}
}
};
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_delete:
new AlertDialog.Builder(SampleThreeActivity.this)
.setTitle("삭제")
.setMessage("전체 삭제 하시겠습니까? \n 다소 시간이 소요될 수 있습니다.")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Message msg =Message.obtain();
msg.what=ALL_DELETE;
//5초 지연 - 지연 시간동안 팝업창을 닫고 다른것을 진행 할 수 있다.
handler.sendMessageDelayed(msg, 5000);
Log.i(TAG, "onClick() End");
Toast.makeText(SampleThreeActivity.this, "삭제 시작", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", null)
.show();
break;
case R.id.bt_01:
toastShow("덧셈 연산 수행");
break;
case R.id.bt_02:
toastShow("뺏셈 연산 수행");
break;
}
}
};
private void allDataDelete(){
try {
Thread.sleep(3000);
}catch (Exception e){
e.printStackTrace();
}
Toast.makeText(SampleThreeActivity.this, "삭제 종료", Toast.LENGTH_SHORT).show();
Log.i(TAG, "allDataDelete() End");
}
private void toastShow(String message){
if(toast==null){
toast=Toast.makeText(SampleThreeActivity.this, message, Toast.LENGTH_SHORT);
}else{
toast.setText(message);
}
toast.show();
}
}
R.layout.sample_three
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sample_three"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.mystudy22.SampleThreeActivity">
<Button
android:id="@+id/bt_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete"
/>
<Button
android:id="@+id/bt_02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="- 연산"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/bt_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="+ 연산"
android:layout_marginTop="82dp"
android:layout_below="@+id/bt_delete"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
댓글 ( 4)
댓글 남기기