스마트폰앱

오늘:
2,539
어제:
2,589
전체:
2,707,438

고객센타 : 070-7752-2000
팩스 : 070-7752-2001
휴대폰 : 010-9513-0019
email : voipkorea@yahoo.co.kr

국민은행
(주)제이에스솔루션
047101-04-155519

Flag Counter
■ 무료 : 유선 집전화 휴대폰 ( 한국 미국 중국 카나다) ↔ (국내 해외 여행자 상사 주재원 유학생) / 가입무 무제한무료■

 

http://arabiannight.tistory.com/67

 

안드로이드/Android Handler 와 Timer(TimerTask) 를 활용한 Intro 화면 구성안드로이드/Android Handler 와 Timer(TimerTask) 를 활용한 Intro 화면 구성

Posted at 2012/03/20 21:19 | Posted in Android/Thread
안드로이드/Android Handler 와 Timer(TimerTask) 를 활용한 Intro 화면 구성


안드로이드 화면구성을 할 때, 가장 먼저 구현해야하는 화면이 바로 Intro 화면 일 것 입니다. Intro 화면이란 현재 실행되는 어플의 첫 화면이 보여지는 화면을 말하는데요, 말 그대로 해당 어플의 성격과 컨셉을 대변해 주는 아주 중요한 화면 입니다.


이렇게 Intro 화면을 보여주고, 실제 Main 화면으로 이동할 경우, 보통의 경우 Handler에 
postDelayed(Runnable r , long delayMillis) 란 메서드를 활용 하는데요. Handler를 사용한 방법 말고도 TimerTimerTask를 이용하여 화면을 이동 할 수 가 있습니다.


자 그럼 우선, Handler를 이용한 화면 전환 부터 확인해 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package arabiannight.tistory.com;
  
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
  
public class TestHandlerActivity extends Activity {
      
    private Handler mHandler;
    private Runnable mRunnable;
      
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          
        mRunnable = new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(getApplicationContext()
                        , ResultPage.class);
                startActivity(intent);
            }
        };
          
        mHandler = new Handler();
        mHandler.postDelayed(mRunnable, 5000);
          
    }
      
    @Override
    protected void onDestroy() {
        Log.i("test", "onDstory()");
        mHandler.removeCallbacks(mRunnable);
        super.onDestroy();
    }
}


우선 Runnable 객체를 만들 후 에, Handler의 
postDelayed(Runnable r , long delayMillis) 메서드를 사용해서 화면을 전환 하는 방법 입니다.
 
 postDelayed(Runnable r , long delayMillis) 

 "런어블객체(Runnable) 를  delayMillis 시간 후에 실행 해라. " 라는 메서드 입니다.
위의 코드에서는 5000 을 주었으니 ( 시스템시간/1000 = 현재시간 )
5초후( 5000/1000 ) 에 실행하게 됩니다. 
 
 


그리고 onDestroy() 메서드에서 removeCallBacks(Runnable r) 을 해 준 것은, 어플리케이션이 종료되어도 실제 onDestory() 메서드가 호출 되어도, 메모리 상에서 Handler가 PostDelayed 메서드를 실행시켜 어플리케이션이 다시 실행되는 경우를 막기 위해서 입니다. 항상 어플리케이션이 종료될 경우를 대비 해서
removeCallBacks(Runnable r) 를 호출해 주는게 바람직 합니다.
 
 removeCallBacks(Runnable r) 
런어블(Runnable)을 제거 한다. 
 
 




자 그럼 TimerTimerTask에 대해서 알아 보겠습니다. Timer는 간단하게 스케쥴을 관리 해주는 클래스인데요. 간단한 시간이나 반복적인 시간에 대해 컨트롤 하고 싶을 때 사용하는 클래스 입니다. 각각의 Timer는 각각의 스레드를 가지고 작업을 하고 있기 때문에 시간관리를 위해 만들어진 Thread라고 생각하시면 됩니다.

TimerTask란 Timer가 스케쥴을 관리하기 위해 사용하는 "작업" 이라고 생각하시면 되는데요. 위의 예제에서 Runnable의 역할이라고 생각 하시면 쉽습니다. 즉, Timer는 TimerTask를 가지고 스케쥴을 관리하고 있습니다.

자 그럼 Timer와 TimerTask의 활용 예제를 만나 보실까요?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package arabiannight.tistory.com;
  
import java.util.Timer;
import java.util.TimerTask;
  
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
  
public class TestTimerTaskActivity extends Activity {
      
    private TimerTask mTask;
    private Timer mTimer;
      
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
          
        mTask = new TimerTask() {
            @Override
            public void run() {
                Intent intent = new Intent(getApplicationContext()
                        , ResultPage.class);
                startActivity(intent);
            }
        };
          
        mTimer = new Timer();
          
        mTimer.schedule(mTask, 5000);
//      mTimer.schedule(mTask, 3000, 5000);
    }
      
    @Override
    protected void onDestroy() {
        Log.i("test", "onDstory()");
        mTimer.cancel();
        super.onDestroy();
    }
}


Timer를 활용한 예제를 만나 봤는데요, Timer 역시 간단하게 코딩 할 수 있습니다. 또한 Handler와 굉장히 유사한 방법으로 코딩을 하게 됩니다. 어떻게 보면 메서드 명만 다르지 완전 같은 함수로 보이기도 합니다.ㅎㅎ


그럼 Timer함수에 대해 알아보겠는데요, schedule(TimerTask task , long delay) 이란 함수를 유심히 보시면 됩니다. ㅎ 이 것 또한 Handler의  postDelayed() 란 메서드와 유사한 기능을 가지고 있습니다.
 

 schedule(TimerTask task , long delay) 
"TimerTask를 delay 시간 만큼 후에 실행 시켜라." 라는 메서드 입니다.
만약 delay를 3초를 지정해 주면,  " 3초 후에 Task를 한번만 실행 해라. "  라는 메서드가 됩니다.

schedule(TimerTask task , long delay , long period)  
그리고, 매개인자3개인  schedule 함수가 있는데요, 이 함수의 기능은,  
 

"TimerTask를 delay 시간 만큼 후에 실행 시키고, period만큼 후에 계속 반복 해라." 라는 메서드 입니다. 만약 delay와 3초와 period 5초를 지정해 주면, " 3초 후에 Task를 실행하고 5초마다 반복 해라. " 라는 메서드가 되는 것 입니다.
 
 
 

  
ㅎㅎ 정말 비슷하네요. 그리고 onDestroy() 메서드에서는 Handler의 
removeCallBacks () 메서드와 같은 기능을 하는 cancel() 메서드를 사용 하였습니다. 마찬가지로 어플리케이션 종료 시에는 Timer의 작업을 취소 해주어야 겠죠?ㅎ
 
 mTimer.cancel()
타이머의 모든 작업(TimerTask)를 취소 합니다. 
 
 



테스트 파일 입니다.

zip.gif TestTimerTask.zip










조회 수 :
28173
등록일 :
2012.09.23
15:44:43 (*.160.42.233)
엮인글 :
http://webs.co.kr/index.php?document_srl=11045&act=trackback&key=790
게시글 주소 :
http://webs.co.kr/index.php?document_srl=11045
List of Articles
번호 제목 글쓴이 날짜 조회 수
64 Sqlite detail easy tutorial. admin 2017-09-09 125
63 Change package name Linphone Android admin 2017-08-25 279
62 Liblinphone - import Linphone library in Android Studio 2017 admin 2017-08-25 271
61 I am able to build the limphone on mac by follow the steps describe here admin 2017-08-25 272
60 To build liblinphone for Android, you must COMPILATION INSTRUCTIONS admin 2017-08-25 261
59 sipdroid source code admin 2017-08-08 340
58 안드로이드 주소록 전체가져오기 이름만가져오기 사진가져오기 코드 admin 2015-04-13 5561
57 the sipdroid Research Miscellaneous admin 2015-03-26 2727
56 HSS070 English Korean 무료 국제전화 미국 중국 카나다 무료 통화 제공 admin 2014-12-28 3982
55 Softphones admin 2014-09-20 4435
54 /xxxxx/gen already exists but is not a source folder. Convert to a source folder or rename it. admin 2014-09-03 4845
53 CSIPSimple building Rebuilding Detail on Eclips Good All is heare perfect admin 2014-08-15 4791
52 Improving QoE of SIP-based Automated Voice Interaction in Mobile Networks file admin 2014-03-20 5602
51 speex support in android admin 2014-03-19 5821
50 voxmobile Source and how to build admin 2014-02-18 6187
49 PJSIP hung the phone constantly corrected the problem admin 2014-02-09 6636
48 Csipsimple code rebuilding source sip 통신 Call Mechanism admin 2014-02-09 18050
47 Csipsimple code rebuilding source sip 통신 technical interviewer admin 2014-02-09 6589
46 Csipsimple code rebuilding source 주요인터페이스분석 admin 2014-02-09 32011
45 Csipsimple code rebuilding source 다운로드 구성 csipsimple 소스 프로젝트 admin 2014-02-09 7659
44 Android DialogFragment Tutorial admin 2014-02-09 6884
43 Creating a fullscreen DialogFragment with a custom background admin 2014-02-09 9298
42 [Android API] 네트워크 상태 체크하기 admin 2013-12-19 8228
41 [안드로이드] 네트워크 연결 상태 체크 함수. admin 2013-12-19 7578
40 안드로이드 인터넷연결체크 ( 3g/lte/wifi ) 메서드 admin 2013-12-19 13913
39 Android Get Phone Contacts details with Contact Image admin 2013-12-15 6904
38 안드로이드 커스텀 타이틀바 How to add custom title bar to android application admin 2013-10-02 9262
37 How to create a custom title bar admin 2013-07-15 9516
36 Rotary Dialer clip art admin 2013-04-20 17142
35 Java 프로그램 실행화일 만들기 : Launch4j admin 2013-02-21 10165
34 java network programming source code, learning socket programming admin 2012-12-04 10292
33 2X Client Configuration | Android Remote Desktop 안드로이드 PC 리모트 데스크탑 admin 2012-12-02 12063
32 WIFI 3G 인터넷 연결 실시간 체크 소스코드 Broadcast Receiver 사용 (Adnroid) admin 2012-10-31 16386
31 통신사별 와이파이 비밀번호 admin 2012-10-31 14349
30 팁, wifi 패스워드 모음집 password admin 2012-10-21 10648
29 Android User Session Management using Shared Preferences admin 2012-10-16 31968
28 Unicode Tables v4 admin 2012-10-16 22931
27 HTML Codes admin 2012-10-16 9622
26 IBM Scan Codes EBCDIC Codes admin 2012-10-16 11787
25 ASCII Table and Description admin 2012-10-16 11093
24 How to Show Alert Dialog in Android (간단하고 쉬운설명) admin 2012-10-15 22076
23 How to read contacts on Android 2.0 admin 2012-10-14 13125
22 WIFI 3G 인터넷 연결 체크 소스코드 직접 사용한 코드 android admin 2012-10-14 15050
21 Android Detect Internet Connection Status admin 2012-10-12 20593
20 JAVA + SSL (server and client examples) admin 2012-10-07 22147
19 Querying The Android Contact Database admin 2012-09-30 10505
18 Manage Contacts android admin 2012-09-30 12463
17 Android Contacts API 2 example admin 2012-09-30 13559
16 Android 2.0 주소록 동기화 기능 admin 2012-09-30 38695
15 안드로이드용 앱 개발 마켓등록 까지 해본거 샘플 무료국제전화 앱 FreeDialer admin 2012-09-27 14536
14 아이폰 IPhone 앱 개발 기본 admin 2012-09-27 11201
13 [안드로이드/개발] Intent admin 2012-09-23 17519
» 안드로이드 타이머 절적한 설명과 간단한소스코드 등 안드로이드 프로그램 설명 깔끔 admin 2012-09-23 28173
11 google voice source code admin 2012-09-22 10488
10 [안드로이드] 서버/클라이언트 소켓(Socket) 통신하기 admin 2012-09-20 20344
9 FreeDial 무료국제전화는 프리미엄 국제전화 다이렉트 회선사용 admin 2012-09-20 11582
8 Android SQlite 사용 admin 2012-09-04 11086
7 안드로이드마켓에 앱 등록하는 순서 admin 2012-08-19 41736
6 전화관련 안드로이드함수 admin 2012-08-18 15109
5 자바 ,이클립스,Android SDK, ADT 설치하여 무료국제전화 다이얼러를 만들어봅시다. admin 2012-08-06 15663
4 아이폰용 무료국제전화용 무료 다이얼러 Speedydialer 설치및 사용방법 file admin 2012-07-14 11000
3 접속번호 + 상대방번호 # 를 주소록에 전화번호로 저장하여 사용하면 편리하다 admin 2012-06-17 12971
2 App Store - ILD Dialer admin 2012-06-17 9539
1 한국휴대폰에서 미국 중국 카나다 무료 국제전화 서비스 admin 2012-04-27 9918