안드로이드

 

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>

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

고독이라는 것은 우리가 우리 자신의 형태를 어떻게 선택할 것인가 하는 과제를 포함하고 있다. 고독에는 불안이 따른다. -사르트르

댓글 ( 4)

댓글 남기기

작성