액티비티 생명주기(Activity Life Cycle) 는 총 6단계를 거치며, 상황에 따라 1단계가 더 추가될 수 있다.
6단계는 시간의 순서에 따라 생성, 시작, 활성화, 비활성화, 중비, 소멸이며,
애플리케이션이 비활성화되었다가 활성화되는 순간 재시작을 거치게 되어 사실상 7단계로 구성된다. (재시작되지 않은채 소멸될수 있다. )

처음 실행시 OnCreate(), onStart(), onResume()순으로 빠르게 호출이 실행된다.
이것은 액티비티가 처음으로 실행될 때이며 테스크가 백그라운드로 숨었다가 다시 실행될 때에는 onStart() onResume() 메서드를 호출하고, onCreate()는 생략된다.
onPause()는 액티비티가 비활성화되어 화면에서 사라지기 직전을 나타낸다.
onStop() 은 액티비티가 화면상에서 완전히 사라져버릴때 호출된다. onPause() 뒤에 불리며 시스템메모리가 부족한 경우 onStop()은 호출되지 않는다.

대부분의 경우 액티비티가 화면상에서 사라지는 순간 onPause(), onStop()순으로 연속 호출되어 두 메서드 사이의 경계를 구분하기가 어려울 수 있는데, onStop()의 호출없이 onPause() 메서드만 호출되었다가 활성화되었을때 onResume()으로 돌아가는 경우는 현재 액티비티 앞에 반투명 액티비티가 존재하는 경우이다.

* 일반적인 실행 종료 주기


#  두개의 액티비티가 존재할 경우
* 최초 실행
사용자 삽입 이미지사용자 삽입 이미지
*  A액티비티 택스트 클릭시 B 액티비티 실행
사용자 삽입 이미지사용자 삽입 이미지
* 취소 버튼으로 B 액티비티 취소
사용자 삽입 이미지사용자 삽입 이미지
* A 액티비티 까지 전부 종료
사용자 삽입 이미지사용자 삽입 이미지

* ActivityLifeCycle.java
package com.froglamb.activity_life_cycle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class ActivityLifeCycle extends Activity {
   
    private String TAG = "ActivityLifeCycle";
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "onCreate()");   
       
        //SecondaryActivity 추가
        TextView text_view = (TextView) findViewById(R.id.text_view);
        text_view.setOnClickListener(
                new OnClickListener() {
                    public void onClick(View v) {
                        Intent intent = new Intent(ActivityLifeCycle.this,
                                SecondActivity.class);
                        startActivity(intent);
                    }
                });
    }
   
    @Override
    public void onStart(){
        super.onStart();
       
        Log.i(TAG, "onStart()");
    }
   
    @Override
    public void onStop(){
        super.onStop();
       
        Log.i(TAG, "onStop()");
    }
   
    @Override
    public void onResume(){
        super.onResume();
       
        Log.i(TAG, "onResume()");
    }
   
    @Override
    public void onRestart(){
        super.onRestart();
       
        Log.i(TAG, "onRestart()");
    }
   
    @Override
    public void onDestroy(){
        super.onDestroy();
       
        Log.i(TAG, "onDestroy()");
    }
   
    @Override
    public void onPause(){
        super.onPause();
       
        Log.i(TAG, "onPause()");
    }
       
}

* SecondActivity.java
package com.froglamb.activity_life_cycle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class SecondActivity extends Activity{
    private String TAG = "ActivityLifeCycle";
   
    @Override
    public void onCreate(Bundle savedInstanceBundle){
        super.onCreate(savedInstanceBundle);
        Log.i(TAG, "SecondActivity/onCreate()");
       
        TextView textview = new TextView(this);
        textview.setText("SecondActivity !!!");
        setContentView(textview);
    }
}


* Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.froglamb.activity_life_cycle"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ActivityLifeCycle"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="SecondActivity" android:theme="@android:style/Theme.Translucent" />

    </application>
    <uses-sdk android:minSdkVersion="8" />

</manifest>

* main.xml - Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:id="@+id/text_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/08 12:10 2010/11/08 12:10
, , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5629

[Android] Logcat - 로그캣

로그캣
안드로이드에서는 app의 로그를 관리하기 위해 "로그캣"이라는 도구를 제공한다.  액티비티의 생명주기를 직접 눈으로 확인하기 위해 각 콜백 메서드가 호출되는 순간 화면상에 로그를 뿌려준다.
로그캣은 DDMS와 이클립스 양쪽에서 모두 사용할 수 있다.
보기 : [Windows] > [Show View] > [Others]  에서 LogCat 을 선택하면 이클립스 하단에 LogCat 이라는 창이 추가된다.
사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지
각 옵션들은 다음 같은 기준으로 로그를 필터링한다.
▶ V : 장황하다는 Verbose의 약자로 상세 정보를 출력하는 데 사용한다.
▶ D : Debug를 의미하며 말 그대로 디버깅 정보를 출력하는데 사용된다.
▶ I : Information의 약자로 위험성이나 오류가 아닌 단순 정보를 출력하는데 사용된다.
▶ W : Warning의 약자로 경고를 출력하는 데 사용된다.
            경고는 오류는 아니지만 개발자가 체크해야 할 정보로 분류됩니다.
▶ E : Error, 애플리케이션 동작에 있어 심각한 오류를 출력할 때 사용된다.

위의 우선순위는 플랫폼이 알아서 판단하고 분류해 주는 것은 아니다. 각 우선순위는 개발자가 모듈이나 애플리케이션 작성 시 한 중의 로그 출력 코드를 추가할 때, 이 로그는 어느 정도의 위험성을 가지는지 판단하여 그에 맞는 레벨의 로그출력 메서드를 사용함으로써 결정된다.

LogFilter
사용자 삽입 이미지사용자 삽입 이미지
LogFilter 윈도우는 프로세스 아이디(pid)와 로그 태그를 기준으로 로그를 분류한다.
Filter Name 은 생성할 필터의 이름 ,
by Log Tag 는 분류할 로그의 태그 정보를 입력하는 곳.
by pid 는 특정 프로세스의 출력만 보는것으로 프로세스 아이디를 입력한다.
by Log Level 은 위의 다섯가지 우선순위 옵션과 동일한 기능이다.

사용자 삽입 이미지사용자 삽입 이미지
* AALCActivity.java
package com.froglamb.android_application_life_cycle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class AALCActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Log.i("AALCActivity", "onCreate");
    }
}


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/08 12:00 2010/11/08 12:00
, , , , , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5628

훈련이 계속되고 몸이 피곤해지면 ‘하루쯤 쉬면 안 될까’하는 생각이 들곤 한다.
하지만 하루를 쉬면 그만큼 다음 날 해야 하는 훈련 양이 많아진다.
미리 준비하지 않으면 기회는 다가오지 않는 법이다.
그것이 내가 하루도 쉴 수 없는 이유다.
- 박지성, ‘멈추지 않는 도전’ 중에서

위대한 사람은 많은 사람들이 밤에 단잠을 잘 적에 일어나서 괴로움을 이기고 일에 몰두했던 사람들입니다.

이어지는 박지성의 글입니다. “언젠가는 그들도 한번쯤 쉴 것이고 그때 내가 쉬지 않고 나아간다면 차이는 조금이라도 줄어들 것이다. 중요한 것은 내가 쉬지 않고 뛰고 있다는 것이지 그들이 내 앞에 있다는 사실이 아니었다.”
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/08 09:24 2010/11/08 09:24
,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5625

세계적인 이야기꾼

비즈니스, 정치, 종교, 엔터테인먼트를 막론하고
모든 분야의 뛰어난 리더들은 대개 최고의 이야기꾼들이다.
그들은 개인성과 보편성을 뒤섞을 줄 안다.
이야기꾼들은 사람들의 지성을 자극하는 동시에,
마음까지 사로잡아야 한다. 말하고자 하는 바가
무엇이든 논리와 정서, 즉 경제적 요소와
예술적 요소가 결합했을 때 비로소
가장 강력한 설득력을 얻는다.


- 스탠 데이비스의《예술가처럼 일하라》중에서 -


* 사람이 이야기를 만들지만
그 이야기가 사람을 만들고 예술을 만듭니다.
이야기가 풍부한 사람이어야 그의 삶이 풍요롭고
그가 적은 글이, 그린 그림이, 작곡한 음악이
사람을 움직입니다. 세계적인 인물이란, 곧
세계적인 이야기를 만들어낸 사람입니다.
그 이야기가 지극히 개인적이면서도
세계적인 보편성을 가질 수 있을 때
비로소 비범함이 드러납니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/08 09:23 2010/11/08 09:23
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5624

내 마음 언제나

그리움만으로
그대를 사랑하는 줄 알았습니다

장미꽃 한 송이로
사랑하는 마음 전해지는 줄 알았습니다

반짝이는 보석으로
사랑하는 마음 조금은 더 전해지는 줄 알았습니다

그리고 한 가지 잊은 게 있습니다
내 마음 언제나 하나
그대에게 가는 단 하나의 길
그 길이었다고
그 마음이었다고

- 홍광일의 시집 <가슴에 핀 꽃>중에서 -

* 우리가 세상에 온 이유는
큰 진실을 알기 위해서 입니다.
그것을 일찍 깨닫고 실천하는, 영혼이 높은 분들도 있습니다.
남녀 간의 간절한 사랑도 그런 깨달음을 얻게 하기 위함입니다.
그 사랑을 확대해 나가면 큰 진실을 보게 될 것이기 때문입니다.
그러나 대부분은 물질에 눈이 멀어, 보이는 것에만 매달려
허둥지둥 살아갑니다. 결국 세상을 떠날 때 쯤에 이르러
알게 되지만 그때는 이미 늦습니다. 더 늦기 전에
사랑하고 사랑을 배워서 삶의 큰 진실을
보게 되시기를 바랍니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/06 16:38 2010/11/06 16:38
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5623

jQuery 로 구현하는 Slide Show 20선. 슬라이드

http://graphicalerts.com/20-best-jquery-slideshow-image-photo-gallery-plugins/


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/05 16:31 2010/11/05 16:31
, , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5622

‘토머스 스탠리(Thomas J. Stanley)가 1996년 발행한 에
나온 미국 백만장자들의 특징은 다음과 같다.
(미국인의 3.4%에 해당하는 백만장자 중 1,000명을 대상으로 20여 년간 연구한 결과)

- 거액의 유산을 받아 백만장자가 된 사람은 극히 드물다.
- 80퍼센트는 고등교육을 받았거나 특별히 머리가 좋은 사람이 아니었다.
- 저축을 생활화하고 지출을 줄이고, 검소하게 입고 소박하게 음식을 먹었다.
- 대부분 평범한 업종, 구체적으로 용접공, 경매인, 고물상인, 이동식 화장실 임대인,
 세탁소, 디젤 엔진 수리공, 도로 포장과 같은 평범한 분야에서
 투철한 직업 정신으로 경제적 소득을 실현한 사람이었다.

백만장자들은 사소해 보이는 일속에서 용기와 신념으로 기회를 일구어낸 것이다.
‘톰 피터스, ‘리틀 빅씽’에서 옮겼습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/05 10:40 2010/11/05 10:40
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5621

나 혼자 사는 게 아니다

나는 결국 나 혼자
사는 게 아닌 것을 알았습니다.
내 안에 들어와 있는 것들, 밥상에 반찬으로 올라와 있는 것들,
심지어 내가 마시는 물도 저 시냇물의 물 한 방울이고,
내가 마시는 이 공기도 나무가 밤새도록 내뿜는
산소 한 모금이라는 것을 알았습니다. 내 몸을
살찌우는 곡식과 채소들이 저 들판에서
나왔다는 걸 아는 데는 많은 시간이
걸리지 않았습니다. 내 의식은
자연에서 자양분을
얻었습니다.


- 이우성의《정말 소중한 것은 한 뼘 곁에 있다》중에서 -


* 사람과 자연은 하나입니다.
사람은 자연과 함께 살아갑니다.
내가 내뱉는 탄소를 나무가 좋아라 마시고
나무가 내뿜는 산소가 나에게는 생명의 근원이 됩니다.
삼라만상이 어느 하나도 따로 떨어져 있거나 혼자 존재하는 것이
없습니다. 마치 혼자 사는 것처럼 오만하게 굴면
자연은 어느 날 성난 얼굴로 나타나
사람들을 호되게 혼을 냅니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/05 10:39 2010/11/05 10:39
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5620

DroidDraw 는 안드로이드 화면 구성 코드를 보다 손쉽게 작성할 수 있도록 GUI 를 구현해둔 것이다. 감탄이 절로 나오는걸~
홈페이지에 들어가면 메인에서 바로 적용해볼 수 있어서 접근성을 엄청 높였다.

DroidDraw - Graphical User Interface (UI) designer/editor for programming the Android Cell Phone Platform

URL : http://www.droiddraw.org/

사용자 삽입 이미지
Android Draw : http://www.droiddraw.org/androiddraw.html
사용자 삽입 이미지사용자 삽입 이미지


Tutorial : http://www.droiddraw.org/tutorial.html

사용자 삽입 이미지
Widget Guide : http://www.droiddraw.org/widgetguide.html

사용자 삽입 이미지



크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/04 20:10 2010/11/04 20:10
, , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5619

모바일 브라우저 종류 체크 - 요즘 모바일 기기가 완전 대세라서 브라우저 호환성 부터 시작해서 이슈가 엄청나다.   아이폰, 아이패드, 갤럭시S, 갤럭시 탭 으로 축약되는데. 기기가 너무 상이하니 적응하기 어려움이 이루 말할 수 없다.

"navigator.userAgent" 라는 에이전트명을 호출하는 스크립트가 있다.

사이트에 접속된 Device 의 userAgent 정보를 확인해서 해당 페이지의 모바일페이지로 이동을 시키든지, 내용을 변경하든지. 알아서들.

만약 기기를 못찾으면 혹시 모르니 아래의 키워드를 소문자로 변환해보시라.
var s = "iPhone";
//  문자열을 대문자로 변환
   s.toUpperCase();
//  문자열을 소문자로 변환
  s.toLowerCase();


<script type="text/javascript">
var mobileKeyWords = new Array('iPhone', 'iPod', 'BlackBerry', 'Android', 'Windows CE', 'LG', 'MOT', 'SAMSUNG', 'SonyEricsson');
for (var word in mobileKeyWords){
    if (navigator.userAgent.match(mobileKeyWords[word]) != null){
        location.href = "보내고 싶은 모바일 경로";
        break;
    }
}
</script>



크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/11/04 19:13 2010/11/04 19:13
, , , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5618

« Previous : 1 : ... 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : ... 639 : Next »

블로그 이미지

- 홍반장

Archives

Recent Comments

  1. 1 pHqghUme 01/05
  2. 1 pHqghUme 01/05
  3. 1 pHqghUme 01/05
  4. 1 pHqghUme 01/05
  5. 1 pHqghUme 01/05

Calendar

«   2025/01   »
      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  
Statistics Graph

Site Stats

Total hits:
256811
Today:
55
Yesterday:
190