안드로이드 앱의 cpu 사용량 구하기. 코드

            ActivityManager activity_manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = activity_manager.getRunningAppProcesses();
Runtime runtime = Runtime.getRuntime();
Process process;
try {
String cmd = "top -n 1";
process = runtime.exec(cmd);
InputStream inputStream = process.getInputStream();
InputStreamReader inputReader = new InputStreamReader(inputStream );
BufferedReader bufferReader = new BufferedReader(inputReader );
String line;

while ((line = bufferReader.readLine()) != null) {
String[] segs = line.trim().split("[ ]+");

for (int i = 0; i < runningApps.size(); i++) {
if (segs[0].equalsIgnoreCase(String.valueOf(runningApps.get(i).pid))) { <--하나의 process의 cpu만 확인하고 싶은 경우 for문을 제외하고, pid값에 원하는 process의 pid 값을 넣어 확인.
cpuAvail += Integer.parseInt(segs[2].replace("%", "")); <-- 현재 사용중인 프로세스들의 총 cpu 사용량을 구하기 위한 합.
// break;
}
}
}

} catch (Exception e) {
e.printStackTrace();
return 0;
}

 

 

'안드로이드' 카테고리의 다른 글

안드로이드 RecyclerView 사용하기 예제  (0) 2017.03.06
공유 가능 앱 리스트 가져오기  (0) 2017.03.06
AsyncTask  (0) 2011.09.06
AppWidget  (0) 2011.07.28
Broadcast Receiver  (0) 2011.07.26
출처 : http://neptjuno.tistory.com/33

public abstract class AsyncTask extends Object

세 가지 generic type(Params, Progress, Result)과 네 가지 step (onPreExecute, doInBackground, onProgressUpdate, onPostExecute)으로 구성

1. generic type
  1) Params : 실행 될 때 task에 전달된 파라미터의 type
  2) Progress : 백스라운드에서 작업하는 동안 발생되는 progress unit의 type
  3) Result : 백그라운드 작업에서 처리된 결과의 type
private class MyTask extends AsyncTask<void, void, void> {...}
private class MyTask extends AsyncTask<URL, Integer, Long>{...}
(필요없는 type에 대해서는 void로 작성)

2. step
  1) onPreExecute()
      - UI thread에서 호출된 즉시 호출되는 메소드
      - task를 setup하는 데 사용

  2) doInBackground(Params .. )
     - onPreExecute()의 수행이 끝난 후 백그라운드로 즉시 호출.
     - 긴 수행 시간을 요하는 작업을 백그라운드로 수행하는 역할
     - asynchronous task의 파라미터는 이 때 전달.
     - 수행 결과는 이 단계에서 반환되어야 하며 마지막 단계로 전달
     - publishProgress(Progress..)를 사용할 수 있으며 이 값들은 onProgressUpdate(Progress..)단계로 인해 UI thread에 불려지게 됨

  3) onPostExecute(Result)
      - 백그라운드 작업이 종료된 후에 UI thread에 호출되는 함수
      - 백그라운드에 계산된 결과가 이 단계의 파라미터로 전달됨

3. Threading rules
    - 이 task instance는 UI thread에서 생성되어져야만 한다.
    - execute(Param..)은 UI thread에서 호출되어져야만 한다.
    - onPreExecute(), onPostExecute(Result), doInBackground(Params..), onProgressUpdate(Progress..)는 수동으로 호출하지 않는다.
    - task는 오직 한번만 수행 될 수 있다.

출처 : http://tigerwoods.tistory.com/28


AsyncTask class
- backgrount 작업을 위한 모든 일(thread 생성, 작업 실행 UI와 통신 등)을 추상화 함으로 각각의 background 작업을 객체 단위로 구현/관리 할 수 있게 하는 것이 목적

type을 정할 필요가 없는 generic이 있다면 void전달

  • protected void onPreExecute():
     Background 작업이 시작되자마자 UI스레드에서 실행될 코드를 구현해야 함. (예. background 작업의 시작을 알리는 text표현, background 작업을 위한 ProgressBar popup등)
  • protected abstract Result doInBackground(Params… params):
    Background에서 수행할 작업을 구현해야 함. execute(…) 메소드에 입력된 인자들을 전달 받음.
  • void onProgressUpdate(Progress... values):
    publishProgress(…) 메소드 호출의 callback으로 UI스레드에서 보여지는 background 작업 진행 상황을 update하도록 구현함. (예. ProgressBar 증가 등)
  • void onPostExecute(Result result):
    doInBackground(…)가 리턴하는 값을 바탕으로 UI스레드에 background 작업 결과를 표현하도록 구현 함. (예. background작업을 계산한 복잡한 산술식에 대한 답을 UI 위젯에 표현함 등)
  • void onCancelled():
    AsyncTask:cancel(Boolean) 메소드를 사용해 AsyncTask인스턴스의 background작업을 정지 또는 실행금지 시켰을 때 실행되는 callback. background작업의 실행정지에 따른 리소스복구/정리 등이 구현될 수 있다.
background 작업의 시작과 background 작업 중 진행정보의 UI스레드 표현
1) final AsyncTask<…> execute(Params… params):
Background 작업을 시작한다. 꼭 UI스레드에서 호출하여야 함. 가변인자를 받아들임으로 임의의 개수의 인자를 전달할 수 있으며, 인자들은 doInBackground(…) 메소드로 전달된다.

2) final void publishProgress(Progress... values):
Background 작업 수행 중 작업의 진행도를 UI 스레드에 전달 함. doInBackground(…)메소드 내부에서만 호출.

AsyncTask인스턴스는 자기 자신을 pending, running, finished 이렇게 세 가지 상태(status)로 구분하는데 각각 AsyncTask:Status 클래스에 상수 PENDING, RUNNING, FINISHED로 표현 될 수 있다

public final AsyncTask.Status getStatus()
를 이용해 인스턴스 상태를 얻을 수 있음.
PENDING, RUNNING, FINISHED 중에서 리턴

'안드로이드' 카테고리의 다른 글

공유 가능 앱 리스트 가져오기  (0) 2017.03.06
안드로이드 앱의 cpu 사용량 구하기  (0) 2017.03.06
AppWidget  (0) 2011.07.28
Broadcast Receiver  (0) 2011.07.26
나인패치  (0) 2011.07.26

AppWidget
- 다른 앱의 일부 영역만을 차지한 채 주기적으로 갱신되는 조그만 앱
- Home Screen에 떠 있는 어플리케이션의 미니어쳐
- AppWidget Host의 일부 영역을 독점적으로 차지하며 자신의 고유한 기능을 수행
- 요약적인 정보를 표시하는 것이 주된 기능
- 간단한 명령 가능
- 복수 개의 인스턴스 설치 가능


AppWidget Host
- Home Screen이 대표적
- 일부런쳐 프로그램도 App Widget Host 기능 수행 가능

AppWidget Manager
- AppWidget을 관리하는 관리자
- 설치된 AppWidget의 목록을 가지며 미리 지정한 시간이 될 때마다 AppWidget에게 신호를 보내 상태를 갱신
- 객체 구현
   + static AppWidgetManager getInstance(Context context)
- App Widget 관련 정보 조사하는 method
   + List<AppWidgetProviderInfo> getInstalledProviders()
   + AppWidgetProviderInfo getAppWidgetInfo(int appWidgetId)
   + int[] getAppWidgetIds (ComponentName provider)
- AppWidgetProviderInfo class
   + AppWidget의 여러가지 속성을 정의
   + 크기, 갱신 주기, 설정 Activity에 대한 정보를 갖음

AppWidget 속성
- AppWidgetProviderInfo class로 기술
   xml 문서로 작성하여 manifest에 meta-data로 포함 (경로 /res/xml/)
- minWidth. minHeight
   AppWidget이 차지할 화면상의 크기 지정
   장치 독립성 확보를 위해 dip 단위를 사용하는 것을 권장
   Home Screen은 4X4 크기의 셀로 구성
   각 셀의 크기는 72dip x 72dip
- updatePeriodMillis
   갱신 신호를 보낼 주기를 지정
   갱신 주기는 1/1000초 단위로 지정할 수 있지만 너무 자주 갱신할 필요는 없음
   갱신 주기는 배터리 성능에 직접적인 영향을 미치므로 가급적 길게 설정할 것을 권장
   1시간 미만의 주기는 권장되지 않음 ( 최소 갱신 주기가 30분으로 정해져있음. - 갱신주기를 짧게 줘도 30분에 한번만 갱신 )
   자주 갱신해야 하는 정보일 경우 (슬라이드 쇼, 주식 시황)는 타이머나 알람을 사용
   알람은 주기를 자유롭게 선택 가능하며 장비가 슬립모드일 때는 동작하지 않음
- initialLayout
   AppWidget의 Layout 기술
   RemoteViews class로만 layout의 정보만 전달하는데 이 클래는 모든 widget만 지원하지 않음
   => layout : LinearLayout, RelativeLayout, FrameLayout
   => View : Button, TextView, ImageView, Progress Bar
   => 기타 : ImageButton, AnalogClock, Chronometer
-configure
  옵션 사항을 편집할 설정 Activity 지정
   Activity class를 밝혀 놓으면 AppWidget이 최초 설치 될 때 호스트에 의해 설정 Activity가 자동으로 호출
   별다른 설정 사항이 없을 경우 이 속성을 생략해도 무방

AppWidget Life Cycle
- AppWidget은 간단한 출력도 Host에게부탁
- 이 통신 사이에서 사용되는 중간 매개체가 RemoteViews
- Android에서 프로세스끼리 통신하는 공식적인 방법은 BroadcastReceiver
- Appwidget은 Host가 보내주는 신호를 받아야 하므로 기본적으로 BR를 구현
- Host와 AppWidget이 주고받는 방송은 AppWidgetManager class에 정의돼 있다.
  = ACITON_APPWIDGET_ENABLED
    첫 번재 인스턴스가 설치될 때 전달
    이제부터 동작을 시작하니 준비하라는 신호.
    예 : 정보 저장을 위한 DB를 생성하거나 파일 목록을 미리 조사해 놓는 것
    AppWidget이 이미 설치 돼 있는 상태에도 부팅 될 때도 전달
  = ACTION_APPWIDGET_DELETED
    AppWidget 인스턴스 중 일부가 삭제 될 때 전달.
  = ACTION_APPWIDGET_DISABLED
     마지막 인스턴스가 제거 될 때 전달
     사용하던 데이터베이스나 임시 파일을 삭제
     ENABLED에서 별도의 초기화를 하지 않아 정리할 것이 없다면 이 방송은 무시해도 됨
     모든 인스턴스가 제거 될 때 AppWidget BR자체가 불증화 되어 더 이상 방송을 수신할 수 없는 상태가 되기 때문에 DISABLED
  = ACTION_APPWIDGET_UPDATE
    개별 AppWidget을 갱신할 때마다 전달
    인스턴스가 새로 설치될 때가 대표적
    갱신 주기가 됐을 때나 장비구 부팅될 때도 다시 그려야 하므로 이 방송이 전달
    AppWidget은 이 방송을 받았을 때 출력할 정보를 재 조사하고 자신을 다시 그린다.
    이 방송을 처리함으로써 위젯의 정보가 사용자에게 출력
    인텐트로는 갱신이 필요한 모든 인스턴스 ID배열이  전달

네 개의 방송 중 AppWidget이 반드시 처리해야 하는 것은 UPDATE뿐

AppWidgetProvider class (AppWidget 제공자)
- BroadcastReceiver의 서브 클래스
onReceive를 재정의 하여 각 액션에 다음 메서드 호출
- void onEnabled(Context context)
- void onDeleted(Context context, int[] appWidgetIds)
- void onDisabled(context context)
- void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
AppwidgetProvider는 위젯을 위한 방송을 받아 각 메소드로 분배하는 단순한 역할을 하는 도우미 클래스일 뿐, 이 클래스를 상속받고 필요한 메서드를 재정의하여 AppWidget 제작
BroadcasReceiver의 서브 클래스 이므로 onReceive 메서드도 당연히 존재하나 AppWidgetprovider가 방송분배를 위해 재정의 하고 잇으므로 서브클래스는 가급적이면 재정의하지 않는 것이 좋다.


레이아웃 내부 위젯 속성 지정
void setimageViewResource(int viewId, int srcId)
void setProgressBar(int viewId, int max, int progress, boolean indeterminate)
void setTextColor(int viewid, int color)
void setTextViewText(int viewId, CharSequence text)

갱신
void updateAppWidget(int appWidgetid, RemoteViews views)
void updateAppWidget(int[] appWidgetIds, RemoteViews views)
void updateAppWidget(Component provider, RemoteViews views)

'안드로이드' 카테고리의 다른 글

안드로이드 앱의 cpu 사용량 구하기  (0) 2017.03.06
AsyncTask  (0) 2011.09.06
Broadcast Receiver  (0) 2011.07.26
나인패치  (0) 2011.07.26
Data Base  (0) 2011.07.25

Broadcast Receiver를 호출하는 method
- sendBroadcast(Intent intent[String srceiverPermission]);
   * 응용프로그램에서 실행될 intent를 전송
   * 허가받은 수신자에게만 방송을 보내고 싶다면 permission도 지정이 가능
   * permmission이 필요 없다면 null이나 생략 가능

- sendOrderBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler schduler, int initialCode, String initialData, Bundle initialExtras)
   * 실행될 intent, android:priority, 실행될 BR, 리턴받은 번들값을 지정해 실행

- registerReceiver(BroadcastReceiver receiver, intentFilter filter)
   * 항상 Broadcast를 수신대기 하고 있는 경우지만 원활할 때만 수신대기 하도록 manifest에 등록하거나 registerReceiver method를 통해 지정하면 등록돼어 실행

- unregisterReceiver(BroadcastReceiver receiver)
   * registerReceiver method를 통해 등록된 것을 해제


자바 코드로 Broadcast Receiver 등록
1. cast 날리기
   Intent intent = new Intent();
   intent.putExtra(Statickeyword.xxxx, true);
   intent.setAction(Statickeyword.xxxx);
   context.sendBroadcast(intent);

2. cast 감지, 처리
   2_1 Broadcast 생성
         BroadcastReceiver br=new BroadcastReceiver(){
         @Override
          public void on Receive(Context context, Intent intent){
         }
    2_2 필터 생성
        private IntentFilter filter = new IntentFilter();
        filter.addAction(Statickeyword.xxxx);

3. Activity 등록
    @Override
         public void onResume(){
         super.onResume();
         registerReceiver(br, filter);
         }

4. 해제
    @Override
         public void onPause(){
         super.onPause();
         unregisterReceiver(br);
         }

Receiver를 Activity에 등록하면 Activity가 활성화 상태에서만 cast에 반응
Broadcast Receiver class를 상속하여 onReceiver method를 오버라이딩 하고 manifest에 추가하면 Activity 상태와 무관하게 cast요청 감지.

'안드로이드' 카테고리의 다른 글

AsyncTask  (0) 2011.09.06
AppWidget  (0) 2011.07.28
나인패치  (0) 2011.07.26
Data Base  (0) 2011.07.25
broadcast receiver java code로 등록  (0) 2011.07.25


버튼의 배경 속성
background 이용
void setBackgroundColor (int color)
void setBackgroundDrawable(Drawable d)
void setBackgroundResource (int resid)

nine patch
확장할 부분과 그대로 출력할 부분을 조각으로 나누어 지정
포멧 : PNG
확장자 : .9.png


이미지 원래 모양 외에 바깥쪽에 1픽셀 너비의 투명한 영역이 추가로 존재
이 영역에 검은색 점을찍어 확장 및 테스트배치 영역에 대한 정보를 기록
위쪽, 왼쪽에는 이미지가 확장될 때 반복될 부분을 지정
아래쪽 오른쪽에는 내용물이 배치될 영역을 지정

android- sdk / tools / draw9patch.bat파일


참고할만한 블로그
http://sje0114121.blog.me/150106034371

'안드로이드' 카테고리의 다른 글

AppWidget  (0) 2011.07.28
Broadcast Receiver  (0) 2011.07.26
Data Base  (0) 2011.07.25
broadcast receiver java code로 등록  (0) 2011.07.25
MediaPlayer  (0) 2011.07.19

  • Cursor android.database.sqlite.SQLiteDatabase.query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    • boolean distinct : 결과 값에 대한 유일한 값만 가져올지에 대한 여부
    • String table : 쿼리할 테이블 명
    • String[] columns : 쿼리대상 열명
    • String selection : 쿼리의 조건절을 구성
    • String[] selectionArgs : selection에 들어간 ? 와일드문자를 대체할 문자열
    • String groupBy  : 데이터를 묶을 그룹 조건 정의
    • String having : groupBy 지정된 경우 그룹 조건 정의
    • String orderBy : 결과의 정렬 조건
    • String limit : 결과 값의 행 개수를 제한을 정의


  •  

    '안드로이드' 카테고리의 다른 글

    Broadcast Receiver  (0) 2011.07.26
    나인패치  (0) 2011.07.26
    broadcast receiver java code로 등록  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12

    등록
    public void on Resume(){
    super.onResume();
    restterReceiver(br,filter)'
    }

    해제
    public void onPause(){
    super.onPause();
    unregisterReceiver(br);
    }

    => Receiver  Activity 등록하면 Activity 활성화 상태에서만 cast 반응

    => BroadcastReceiver class 상속하여 onReceiver method 오버라이딩 하고 manifest 추가하면 Activity상태와 무관하게 cast요청을 감지.

    '안드로이드' 카테고리의 다른 글

    나인패치  (0) 2011.07.26
    Data Base  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12

    Audio 포맷
    - WAV, MP3(8~320Kbps), MIDI, OGG, 3GP
    Video 포맷
    - H263, H264, Mpeg4


    생성자
    public MediaPlayer()

    재생할 미디어 전달
    void setDataSource(String path)
    void setDataSource(Context context, Uri uri)
    void setDataSource(FileDescriptor fd, [long offest, long length])

    method호출
    void prepare()                      - 동기적으로 준비하여 준비 끝나면 return
    void prepareAsync()             - 시간이 오래 걸릴 때 사용. 비동기적 동작. 콜백을 통해 준비 완료를 통보받아야 함.
    - 준비상태가 되면 이후 바로 재생 가능. 
    - 로컬 파일이나 Uri객체로부터 미디어 오픈
    - return값은 없으며, 에러 발생시 예외가 return->반드시 처리
    - ex)동영상의 경우 필요한 코덱을 찾는 등 원활한 재생을 위해 얼마간의 버퍼할당 필요 때문에 오픈 직후 자동으로 준비상태를 만들기 위해 호출

    create method
    static MediaPlayer create(Context context, int resid)
    static Mediaplayer create(Context context, uri uri.[SurfaceHolder holder])
    - 스트림은 열 수 있으나 파일을 직접 열수는 없음.
    - 리소스의 미디어는 보통 작은 크기이므로 오픈 직후 자동으로 준비상태가 돼 바로 재생 가능.
    - 에러 발생시 예외를 return하는 대신 null이 return
    - 간단한 효과음을 재생할 때는 이 method를 호출하는 것이 간편,

    재생관련 method
    void start()                        - 재생을 시작한 후 즉시 return->사운드 재생 중에도 다른 작업 가능. 재생시작후 스트림의 끝까지 재생한 후 자동으로 멈춤.
    void stop()
    void pause()

    반복적 재생을 위한 method
    void setLooping (boolean looping)
    boolean isLooping()
    - setLooping(true)를 호출해 두면 한 스트림을 계속 반복 -> 게임 배경음악 재생용으로 적합.


    void release()     : 객체를 완전히 파괴하여 더이상 사용할 수 없는 상태로 해제, 재생 중에도 호출 가능
    void reset()        : 초기화되지 않은 처음 상태로 객체를 되돌리며 이후 재초기화 해 사용할 수 있음.


    create 정적 메소드 - 대용량 미디어에는 효율이 좋지 않기 때문에 짧은 미디어에만 사용.

    raw폴더에 있는 파일 재생. 리소스재생,
    Button play=(Button)findViewById(R.id.play);
    play.setOnClickListener(new Button.OnClickListener() {
       public void onClick(View view){
             MediaPlayer player = MediaPlayer.create(MyPlayer.this, R.raw.pinocchio);
             player.start();
        }
    });

    상태변화도



    - 객체를 처음 생성하거나 reset하면 Idle상태로 시작.= 재생 할 수 없는 상태
    - 똑같은 Idle 상태라도 새로 생성된 객체과 reset된 객체의 동작은 조금 다름. (상태에 맞지 않는 메소드 호출시 에러처리가 다름) = 생성 직후엔 단순히 에러를 무시/ reset된 객체  Error상태로 전환 onError콜백 호출.
    - Idle상태에서 초기화 하려면 setDataSource메서드를 호출하여 미디어 오픈
       = 이 메서드는 Idle일 때만 호출 가능.
       = 재생 중이거나 일시 정지된 상태에서 미디어를 교체하진 못함.
       = 미디어를 연 후 prepare 메서드 호출하여 준비상태로 전환, 재생 전엔 반드시 준비 상태
       = create 정적 메서드로 객체를 생성하면 생성과 동시에 미디어를 열고 준비상태로 시작. 준비상태일때 볼륨 조절, 반복여부등을 조절 가능
       = start메서드 호출하면 재생중 상태가 되며, 이 상태에서 언제든지 정지, 일시정지 가능. 
       = 일시정지는 pause/start메서드로 언제든지 토글 가능.
       = 그러나 stop상태에선 바로 재생 상태로 복귀할 수 없으며 다시 준비 과정을 거친다.
       = isPlaying 메서드는 현재 재생중인지를 조사하는데, 일시정지, 상태일때는 false이며 재생중에는 true가 리턴.

    재생 길이나 위치 조사 및 변경하는 메소드
    - ingetDuration() : 총 재생 길이
    - ingetCurrentposition() : 현재 재생 위치
    주로 프로그레스바 갱신에 사용.
    둘다 준비 상태 이후에는 언제든지 호출 가능.
    seekTo는 재생 위치를 임의로 변경 - Prepared, Started, Paused, PlaybackCompleted상태에서 호출 가능.
    재생 중에도 즉시 다른 위치로 이동 가능하며 준비나 일시정지된 상태에서도 시작 위치를 마음대로 바꿀 수 있지만 정지된 상태에서는 위치를 바꿀 수 없다.

    mediaplayer는 상태가 변경되거나 에러가 발생할 때 미리 등록된 콜백 메서드 호출
    에러콜백은 등록하는 것이 좋음.

    void setOnErrorListener (MediaPlayer.OnErrorListener listener)

    void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)

    void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)
    - 스트림을끝까지 재생했을 때 호출. 이때 객체는 재생 완료 상태.
    - 이 콜백을 받았을 때 start메서드를 호출하면 같은 미디어 처음부터 다시 재생.
    - 다음 미디어 재생 위해선 reset하여 Idle상태로 돌아간 후 처음부터 다시 시작.
    - setDataSource 메서드는 Idle상태에서만 호출 가능하므로 reset해야만 미디어 교체 가능.

    void setOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListener listener)
    -스트리밍 시에 버퍼에 새로운 데이터가 들어왔을 때 호출.
    - 로컬 리소스나 파일을 읽을 때는 버퍼링을 하지 않으므로 이 콜백을 프로그래밍 할 필요는 없음.

    void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)
    - 재생 위치 변경이 완료될때 호출.
    - seekTo 메서드가 동기적으로 동작하지 않으므로 변경 시점을 알아내려면 필요.


    '안드로이드' 카테고리의 다른 글

    Data Base  (0) 2011.07.25
    broadcast receiver java code로 등록  (0) 2011.07.25
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12

    onCreate
    • 호출 시점 : 앱이 새로 실행되거나, 앱을 종료하지 않은 상태에서 다른 앱이 실행되면서 안드로이드가 메모리 확보를 위해 강제로 프로세스를 죽였다가 back 버튼으로 해당 앱으로 돌아오려 할 경우. 즉, Activity가 메모리에 완전히 다시 올라갈 경우
    • 실행할 사항 : 모든 Activity에서 초기화 상황을 확인하고 설정을 읽고 적용하는 등의 기본적인 초기화 상황을 수행해야 한다. 앱이 메모리에서 내려간 경우, 설정 사항도 모두 없어지기 때문에 모든 Activity에서 초기화를 할 수 있어야 한다. 다음으로 각종 Activity view 객체와 이벤트 핸들러를 초기화한다. 세번째로 Intent를 확인하고 각종 모델과 데이터 객체를 초기화한다. 마지막으로 이전에 종료된 상태를 복구하기 위해 Bundle을 이용해 필요한 데이터나 객체를 복구한다
    onStart
    • 호출 시점 : onCreate 실행 후, 또는 onRestart 실행 후 호출된다.
    • 실행할 사항 : 연산이 필요할 경우 연산을 수행한다.
    onResume
    • 호출 시점 : onStart 다음, 또는 다른 Activity 실행을 위해 onPause가 실행된 다음 호출. onResume 이후에 Activity가 실제로 동작함
    • 실행할 사항 : 화면에 내용을 출력한다. 각종 View 객체에 출력할 값을 세팅한다.
    onPause
    • 호출 시점 : 다른 Activity가 실행되면 현재의 Activity를 임시중단시킨다. 화면에 여전히 보여지는 상태(예를 들어 다이얼로그 팝업이 뜨는 경우)에는 onPause까지 실행된다.
    • 실행할 사항 : 별다른 사항이 없다. 현재 상태 저장을 위한 기능은 안드로이드가 알아서 한다. 추가로 저장이 필요한 사항은 onSaveInstanceState 메소드에서 구현한다. 필요할 경우 구현한다.
    onStop
    • 호출 시점 : 화면에 더 이상 보여지지 않을 경우 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.
    onDestroy
    • 호출 시점 : Activity가 완전히 종료될 때 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.
    onRestart
    • 호출 시점 : onStop으로 Activity가 화면이 완전히 가려졌다가 다시 보여질 때 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.



    ※ A Activity 실행 중 다른 신호가 들어왔을 때의 반응 ( Log cat을 통해 확인 )
    onCreat  A - onResum A - Intent - onPause A - onCreat B - onStop A

    public class TextTestActivity extends Activity {
     static final String TAG = "ActParent";
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.i(TAG,"onCreate");
         super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
       
    //    Button btn = (Button)findViewById(R.id.bt);
        public void OnClick(View v){
         Log.i(TAG, "startActivity");
         Intent intent = new Intent(this, TextTestchild.class);
         startActivity(intent);
        }
        public void onResume(){
         super.onResume();
         Log.i(TAG,"onResum");
        }
        public void onPause(){
         super.onPause();
         Log.i(TAG,"onPause");
        }
        public void onRestart(){
         super.onRestart();
         Log.i(TAG,"onRestart");
        }
        public void onStop(){
         super.onStop();
         Log.i(TAG,"onStop");
        }
        public void onDestroy(){
         super.onDestroy();
         Log.i(TAG,"onDestroy");
        }
    }

    '안드로이드' 카테고리의 다른 글

    broadcast receiver java code로 등록  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    9.png  (0) 2011.07.12

    - Android의 Activity들은 startActivityForResult() method 통해 sub activity를 만들고 Activity끼리 서로 데이터를 교환 가능하며 그 사이에는 'Extra'라고 하는 통로가 존재.

    -

    Activity A가 startActivityForResult를 통해 Activity B를 호출
    B는 종료되면서 Result값을 통해 Extra 꾸러미를 넘김.
    Activity는 Extra 꾸러미 안에 있는 데이터들을 꺼내서 사용할 수 있음.

    [Activity A 사이드]
    Activity A에서 구현되어야 할 부분
    1. int 값의 requestCode 값 설정
    2. Intent를 만들어 Activity B를 실행
    3. onActivityResult()통해 requestCode 값에 해당하는 결과값을 받아옴.

    [Activity B 사이드]
    Activity B에서 구현되어야 할 부분
    1. Intent를 만들어 데이터 꾸러미를 Intent에 추가시킴
    2. 결과값을 보내면서 Extra 꾸러미를 가지고 있는 intent를 함께 넘겨줌.

    참고 : http://blog.naver.com/hisukdory?Redirect=Log&logNo=50088038280




    public void startActivityForResult(Intent intent, int requestCode)
    - 인수가 추가됨, (int requestCode)
    - 호출한 대상을 나타내는 식별자이며, 리턴시에 누구에 대한 리턴인가를 구분할 때 사용.
    - 여러 Activity를 호출할 경우 리턴받는 method에서 어떤 Activity에 대한 리턴인지를 구분할 수 있어야 하므로 호출되는  Activity별로 고유 번호를 붙인다.
    - 0이상의 중복되지 않는 정수를 넘기되 음수를 넘길 경우 리턴을 받지 않겠다는 뜻이다.
    - 호출된 Activity가 종료되면 다음 method가 호출되므로 리턴값을 받으려면 method 재정의
    protected void onActivityResult(int requstCode, int resultCode, Intent data)
    requestCode : Activity 호출 시 전달한 요청코드
    resultCode : Activity 실행결과
    data intent : 리턴 값 들어 있으므로 data 안의 Extras를 읽음.

    '안드로이드' 카테고리의 다른 글

    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    9.png  (0) 2011.07.12
    android의 gravity와 layout_gravity  (0) 2011.07.12

    + Recent posts