Android activity 구동방식

JAVA/Android_Tip 2012.07.23 14:40
크리에이티브 커먼즈 라이선스
Creative Commons License

 

이번시간 포스팅은 안드로이드 구동방식에 대한 Activity 생명 주기를 알아보도록 하겠습니다.

 

 

대체적으로 알려져 있는 액티비티 라이프 사이클이죠? 하지만 개발자들 중에는 이걸 중시하고 프로그래밍을 하는 사람도 있지만

일부 안드로이드 프로그래머들은 이걸 별로 생각하지 않는 사람이 많습니다.

위에 개념도만 봐도 어떻게 움직이는지 잘 보이실 겁니다. 특히 게임 만드실려고 하시는 분들은

저 개념도를 유념히 봐주시길 바랍니다. 왜냐! 사용자가 홈키를 눌렀는데 데이터를 보존해야되는데 그부분이 조기~

 

onPause에서 처리를 해주어야 하는데 안해놓으면 다시 사용자가 돌아왔을 때 해당 게임의 상태가 저장 안되어 있어서

다시 처음부터 해야되는 불상사가 벌어질 수도 있습니다.

 

이렇게 말만하면 무슨 말인지 모르겠죠?

그래서 코드를 준비했습니다. 별로 어려운 코드는 아니구여

안드로이드 기초정도 하신분이라면 코드만 올려도 알아서 xml 구성하셔서 할꺼라고 믿습니다.

 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

 

public class ActivityLifeCycle extends Activity {  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Log.d("첫 시작!", "onCreate()");
       
        Button finishButton = (Button) findViewById(R.id.finish); // 액티비티 종료 버튼 객체 받아오기.
        finishButton.setOnClickListener(new View.OnClickListener() {            //리스너 설정
            @Override
            public void onClick(View v) {
                finish(); //버튼 클릭시 액티비티 종료
            }
        });
    }
   
    @Override
    protected void onSaveInstanceState(Bundle outState) { //값 유지 매소드(매소드 이름만 봐도 대충 알겟죠?)
        super.onSaveInstanceState(outState);
       
        Log.d("Activity", "onSaveInstanceState()");
    }
   
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) { //값 복구 매소드.
        super.onRestoreInstanceState(savedInstanceState);
       
        Log.d("Activity", "onRestoreInstanceState()");
    }

    @Override
    protected void onDestroy() { //종료 매소드
        super.onDestroy();
        Log.d("Activity", "onDestroy()");
    }

    @Override
    protected void onPause() { //일시 정지 매소드
        super.onPause();
        Log.d("Activity", "onPause()");
    }

    @Override
    protected void onRestart() { //재시작 매소드
        super.onRestart();
        Log.d("Activity", "onRestart()");
    }

    @Override
    protected void onResume() { //재계(개?) 매소드
        super.onResume();
        Log.d("Activity", "onResume()");
    }

    @Override
    protected void onStart() { //시작 매소드
        super.onStart();
        Log.d("Activity", "onStart()");
    }

    @Override
    protected void onStop() { //멈춤 매소드.
        super.onStop();
        Log.d("Activity", "onStop()");
    }
}

자 이제 스샷으로 확인해 봅시다.

 

처음 시작했을 때 입니다. 순서대로 딱 3개가 구동 되죠?

저 같은 경우는 딱히 사용자의 데이터를 모아두는걸 만들어 본적이 없는 관계로 OnCreate에 정의하면 땡이었지만

나중에 다른걸 만들걸 대비해서 여러 테스트는 해보고 있습니다.

 

이번엔 홈키를 눌렀을 때 입니다. 상태를 저장하고 일시 멈춤 뒤에 멈춤을 호출하는게 보이네여

 

다시 그 앱을 눌렀을 때의 반응 입니다.

 

그리고 백키를 눌렀을 때.

액티비티가 하나밖에 없어서 그런지 바로 종료가 되는 군여

 

다시 실행해서 액티비티 종료 버튼을 눌렀을때의 반응입니다.

 

저렇게 도식화된 표보다는 이렇게 스샷으로 로그캣을 찍어보는것도 확실히 알 수 있는 좋은 방법이라 생각됩니다.

 

 

 

저작자 표시 비영리 변경 금지
신고

'JAVA > Android_Tip' 카테고리의 다른 글

Develop - Create a Project with Eclipse  (0) 2013.11.12
Design- Devices and Displays  (0) 2013.11.12
Android activity 구동방식  (0) 2012.07.23
Date클래스 이용 현재시간 구하기.  (0) 2012.07.16
Bitmap Canvas 스킬  (0) 2012.07.11
이미지 월 페이퍼 지정방법  (0) 2012.07.06

Date클래스 이용 현재시간 구하기.

JAVA/Android_Tip 2012.07.16 12:32
크리에이티브 커먼즈 라이선스
Creative Commons License
class MyDate extends Date
{
 public int getYear()
 {
  return super.getYear() + 1900;
 };
 public int getMonth()
 {
  return super.getMonth() + 1;
 };
 public int getDate()
 {
  return super.getDate();
 };
 public int getHours()
 {
  return super.getHours();
 };
}

 

 

Date클래스를 이용하여 현재시간을 나타내는 클래스를 짜보았다..

너무 간단해서 머 어렵고 자시고 할게 없다..

그냥 쓰면 되겠다. Calendar클래스를 쓰라고 api에서는 권고하기는 하는데..

 

이게 좀더 편하지 않나 싶다.

저작자 표시 비영리 변경 금지
신고

포토샵 - 6.특정 부분 삭제

포토샵 2012.07.16 12:14
크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 

저작자 표시 비영리 변경 금지
신고

Bitmap Canvas 스킬

JAVA/Android_Tip 2012.07.11 13:54
크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 

 

 

 

 

 

 

 

 

외국 성님들이 하는 방식이

 

Bitmap wallpaper = Bitmap.createBitmap(displayWidth*5,displayHeight, Config.ARGB_8888);
 
Canvas canvas = new Canvas(wallpaper);
 
Uri data = getIntent().getData();
 
Bitmap bmp = getBitmap(data, imagePosition, displayWidth, displayHeight);
 canvas
.drawBitmap(bmp, 0, 0,null);
 
WallpaperManager wallpaperManager = (WallpaperManager) SetterActivity.this.getSystemService(Context.WALLPAPER_SERVICE);
 wallpaperManager
.setBitmap(wallpaper);
 wallpaperManager
.suggestDesiredDimensions(bmp.getWidth()*2, bmp.getHeight());

커다란 비트맵 객체로 Wallpaper라는 큰 도화지를 만들어서

Canvas객체로 Bitmap객체를 연결한다. 그리고 이미지를 받아와서

그 도화지에 하나 하나 집어 넣는건데..

저기서 getBitmap이라는 메소드를 외국 성님께서 안적어주신 바람에

지금 골머리를 앓고 있다. 대충 느낌은 이미지의 위치를 정하는 부위인거 같은데..

여튼 이런식으로 하면 Bitmap위에 다른 Bitmap도 섞을 수 있다는거 .

 

[출처] http://javaexpert.tistory.com/376 [작성자] by 흑곰맨 in tistory

 

private Bitmap overlayMark(Bitmap baseBmp, Bitmap overlayBmp, int distanceLeft,

    int distanceTop)

{
    Bitmap resultBmp = Bitmap.createBitmap(baseBmp.getWidth() + distanceLeft,
                                                             baseBmp.getHeight() + distanceTop, 
                                                             baseBmp.getConfig());
    Canvas canvas = new Canvas(resultBmp);
    canvas.drawBitmap(baseBmp, distanceLeft, distanceTop, null);
    canvas.drawBitmap(overlayBmp, 0, 0, null);
    return resultBmp;
}

 

흔히 이런식으로 bitmap끼리의 위치를 조정하여 사용하기도 한다.

즉 저기 getBitmap이라는 곳이 위의 overlayMark랑 비슷한 효과인거 같은데 저부분에 대한 연구는 지금 하는 중..

이다.

저작자 표시 비영리 변경 금지
신고

포토샵 - 5.수평계 사용해보기

포토샵 2012.07.09 13:02
크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 

 

저작자 표시 비영리 변경 금지
신고

이번에 앱을 만들었어요 ㅋ

포토샵 2012.07.09 11:59
크리에이티브 커먼즈 라이선스
Creative Commons License
https://play.google.com/store/apps/details?id=com.jo.wallpapermake

 

 

그냥 보잘 것 없는 앱이긴 한데..

 

한번씩 와서 봐주세요 ㅋ

 

좋으면 다운로드 해주심 더 고맙구여  ㅋ

저작자 표시 비영리 변경 금지
신고

이미지 월 페이퍼 지정방법

JAVA/Android_Tip 2012.07.06 15:40
크리에이티브 커먼즈 라이선스
Creative Commons License

월페이퍼 지정 방법 (코딩상으로)

 

 WallpaperManager myWallpaperManager
     = WallpaperManager.getInstance(getApplicationContext());
    try {
     myWallpaperManager.setResource(R.drawable.wallpaper);
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

 

이렇게 지정한 후에 반드시 매닌페스트(아나..발음..)에 들어가셔서

android.permission.SET_WALLPAPER

꼭 한번이 아닌 두번 ㅋㅋㅋ 퍼미션 설정을 해주어야 한다.

 

안하면 안되는거 알져??

 

그리고 저기 보면 .setResource라는 부분이 있다. 저 부분은 굳이 Resource를 넣을 필요는 없는데..

이미지를 넣어 놓은걸로 바탕화면을 꾸리고 싶다 그러면 저 대로 쓰고

아니면 내부에 이미지를 가져다가 쓰고 싶다!!라면

setBitmap인가 ... (아마 아닐꺼다..)

그냥 set친 다음에 우리의 도우미 컨트롤 스페이스바를 누르시고 setXXX(bitmap)라고 되어있는걸

친절히 써주길바란다.

저작자 표시 비영리 변경 금지
신고

포토샵 - 4.어두운 사진 밝게 하기.

포토샵 2012.07.06 11:54
크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 

 

 

 

 

 

 

 

 

저작자 표시 비영리 변경 금지
신고

안드로이드 화면상태바 및 타이틀바 없애기

JAVA/Android_Tip 2012.07.04 13:57
크리에이티브 커먼즈 라이선스
Creative Commons License

이번 2012년 7월 4일 쯤 업데이트를 하고 프로젝트 생성결과

테마가 새로 지정되었다..

나름 괜찮더라.. 화이트와 블루의 조합..음...

 

그래서 이걸 살리면서 무지막자하게 큰 타이틀 바를 어떻게 지울까 하다가..

 

기존에 나와있는 방식 대로 xml에서 컨트롤 해보았다..

 

하지만.. 그럼 style적용 되어있던게 풀리면서 예전 디자인이 나오는 것이다...

 

그것보단 이번 적용 디자인을 살리면서 탭을 만들려고 했다..

 

그래서 찾아낸게 바로 이 밑에 줄 항목이다.

 

requestWindowFeature(Window.FEATURE_NO_TITLE);  // 이전 스타일 유지. 현 상황에서 타이틀 없앰

 

그럼 이렇게 나온다.

 

 

 

저작자 표시 비영리 변경 금지
신고

포토샵 -3. 원하는 부분만 살리고 배경 지우기

포토샵 2012.07.04 11:39
크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 

 

 

 

저작자 표시 비영리 변경 금지
신고


티스토리 툴바