마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Handler클래스의 개념에 대해서 설명 가능하신 분 ㅠㅠㅠ

0 추천
혹시 Handler의 개념에 대해서 잘 이해가 안되서 그러는데 설명 가능하신분 계신가요?
제가 1시간에 한번씩 주기적으로 경고알림을 줄수 있는 메서드를 구현하게 되었습니다. 거의 예제 따라식으로 구현하여 어느정도밖에 이해가 안되서요..
일단 Handler를 사용해서 구현하였고, sendEmptyMessageDelayed이 메서드를 사용하여 1시간에 한번씩 불리도록 하였는데요.. Handler의 정확한 역할이나 그런게 뭔지 이해가 잘 안되서요 ㅠㅠ

 

 Handler OneHourHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String link = "http://210.115.226.148/OneHourData.php";

            NetWork_String nw = new NetWork_String(link, getApplicationContext());
            ArrayList<NameValuePair> ars = new ArrayList<>();
            ars.add(new BasicNameValuePair("name", name.split("@")[0]));
            try {
                String s = nw.getStringByPOST(ars);
                str = s.split(" ");
                if (!s.equals("n")) {
                    //받는값이 n이 아니면 한시간 이내에 평균값을 받는다.
                    if (Integer.parseInt(str[0]) >= 690) {
                        PendingIntent pendingIntent = PendingIntent.getActivity(MyService.this, 0, new Intent(getApplicationContext(), MainActivity.class),
                                PendingIntent.FLAG_ONE_SHOT);
                        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                        NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(MyService.this)
                                .setSmallIcon(R.drawable.icon)
                                .setContentTitle("1시간 경과!!")
                                //타이틀로 상단 알람을 준다.
                                .setContentText("5분이상 휴식이 필요합니다.")
                                .setAutoCancel(true)
                                .setSound(defaultSoundUri)
                                .setAutoCancel(false)
                                .setContentIntent(null);  //intent 값 null 넣으면 반응 안함
                        NotificationManager notificationManager =
                                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                        notificationManager.notify(0, notificationBuilder.build());
                        type = "time";
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            OneHourHandler.sendEmptyMessageDelayed(0, 60 * 60 * 1000);
            //OneHourHandler.sendEmptyMessageDelayed(0, 60 * 30 * 1000);
            //한시간뒤에 핸들러 다시 실행
        }
    };

구현 소스는 위과 같고 한시간에 한번씩 경고를 주도록 하였습니다. 위에 PHP페이지에 연결은 지금 소스가 5초당 한번씩 데이터베이스에 데이터를 저장하는데, 그 데이터를 통해 계산한 초 데이터가 690 이상이면 울리도록 해놓았습니다.

왜 Handler를 사용하였는지가 궁금하고 handler의 역할이 뭔지 그리고 그 역할과 지금 이 기능과의 연관성이 뭔지를 모르겠어서요

인터넷에 나오는 Handler의 역할을 보면 제가 구현하기 위해 쓰는거는 아닌것 같기도 하고 ㅠㅠㅠㅠ
익명사용자 님이 2017년 11월 29일 질문

1개의 답변

0 추천
minor (13,710 포인트) 님이 2017년 11월 30일 답변
...