Unparsed aapt error(s)! Check the console for output. 발생 시

이클립스에서 위의 에러 발생 시

메뉴에서 [Project] > [clean] 으로 처리하시오.

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

Posted by 홍반장

2010/11/08 18:27 2010/11/08 18:27
, , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5630

액티비티 생명주기(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


블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2010/11   »
  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        
Statistics Graph

Site Stats

Total hits:
182777
Today:
166
Yesterday:
607