SlideShare una empresa de Scribd logo
1 de 17
S.O.Lab develop by 이상온

ANDROID 기초강좌
Android 개발환경 구축


    JAVA


             Eclipse
                             Eclipse 안에 Android Develop Kit 설치

                             ADT



                                            SDK
                          SDK for Windows


애뮬레이터 셋팅 및 안드로이드 플랫폼 패키지 설치
예: Android 2.2.3(API 10), Android 4.0 (API 14)
Android App 의 구조

                         Java coding 구현 부분

         (2)’’main”으로 설정한 값 참조


                         Main page 디자인 구성파일


  (1)’hello’로 설정한 값 참조
                         XML 태그속성을 정의
                         예: hello => helloworld~!!

                         App 환경설정 및 시작
Android App 가지고 놀기1

setContentView(R.layout.main)


res/layout/main.xml -> @string/hello


Res/values/strings.xml




       ID : android:id : 레이아웃 파일에 외부에서 참조할ID
       findViewById() : 자바코드에서 레이아웃 파일 찾기
       OnClickListener : 참조한 객체 이벤트 처리코드
Android App 가지고 놀기2
<Button
   android:id="@+id/startBtn"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
@+id : 리소스 정보에 추가. @id : 기존리소스 참조

import android.widget.*;
import android.view.*;
import android.view.View.OnClickListener;

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

        Button startbtn = (Button)findViewById(R.id.startBtn);
        startbtn.setOnClickListener(new OnClickListener(){
        public void onClick(View v)
        {
        Toast.makeText(getApplicationContext(), "시작버튼 룰럿음.....", 1000).show();
        }
        });
    }
}
Android App 가지고 놀기3
                                       public class NewActivity extends Activity {}
   새로운 화면 만들기
                                       <Button
                                          android:id="@+id/backBtn"
  1. 새로운 액티비티 만들기                         android:layout_width="fill_parent"
                                          android:layout_height="wrap_content"
                                          android:text="@메인으로 돌아가기"
  2. 새로운 레이아웃 만들기                         />

                                        <activity android:name=".NewActivity">
  3. 메니페스트 태그 추가하기                         </activity>
  4. 액티비티 코드 추가하기                       setContentView(R.layout.newActivity);




Intent myIntent = new Intent(getApplicationContext(),NewActivity.class);
startActivity(myIntent);

Intent :하고자 하는 행위를 의미하는 것으로 서로간의 데이터 전달이나
        원하는 기능이 무엇인지를 알려주는 역할을 한다.
LayOut Inflation
Inflation : XML파일의 레이아웃에 정의된 내용이 메모리상에 올라가는 과정

자주 사용될 Xml layout을 미리 정의후 필요한 레이아웃에 재사용 방법

setContentView()
LayoutInflator class
getSystemService()


LinearLayout loginLayout = (LinearLayout) findViewById(R.id.loginLayout);

LayoutInflater inflater = (LayoutInflater)
                    getSystemService(context.LAYOUT_INFLATER_SERVICE);

Inflater.inflate(R.layout.login, loginLayout, true);

           Main.xml                                    Login.xml
화면 구성과 화면이동
       안드로이드 구성 4대요소
       1. 액티비티
       2. 서비스                             AndroidManifest.xml
       3. 브로드캐스트 수신자
       4. Content provider

   setContentView() -> startActivity()


Intent tempintent = new Intent(getBaseContext(),AnotherActivity,class)
startActivityForResult(tempintent, requestcode);
onActivityResult(requestcode, resultcode, Data);

띄워졌던 액티비티를 닫을때 보내온 응답데이터를 처리할수 있다.
Requestcode, resultcode 는 사용자가 마음대로 정의할수있다.
인텐트와 데이터 전달
Android.content.Intent 페키지
startActivity()
startService() & bindService()
boradcastIntent()


  Intent의 기본구조 : 액션 (action) + 데이터 (Data)
  Intent myActivity = new Intent(Intent.ACTION_DIAL, Uri.parse(myData);



ComponentName name = new ComponentName(“com.solab.test.basic”,
                              ”com.solab.test.basic.AnotherActivity”);
Intent.setComponent(name);
startActivityForResult(intent, REQUEST_CODE_ANOTHER);
인텐트와 데이터 전달
       Activity A                               Activity B
                           인텐트: 액션+데이터

startActivityForResult()
                             requestCode




                                            setResult()
  onActivityResult()
                            requestCode
                            resultCode
                            Optional data


    암시적 인텐트 : PDF파일을 열때 많은 뷰어앱들이 있으므로 시스템으로 요청을 보내면
             선택한 뷰어로 보여주게 되는 방법
인텐트와 데이터 전달
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, “application/pdf”); // MIME 타입지정
Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


Flag & 인텐트 스택

액티비티가 새롭게 생성되면 스택의 형태로 액티비티가 쌓이게 된다.
가장 나중에 생성된 액티비티가 화면에 보이게 되며 스택의 최 상의에
위치하게 되지만 중복되는 액티비티가 리소스 낭비를 시키게된다.
이 문제를 해결하기 위한 방법중 대표적인것이 FLAG 이다.

FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_NO_HISTORY // 스택추가없이 액티비티 생성
FLAG_ACTIVITY_CLEAR_TOP // 부모 제외모든 액티비티 종료후 생성
인텐트와 데이터 전달
FLAG_ACTIVITY_SINGLE_TOP :
액티비티 생성시 이미 생성된 액티비티 있으면 그 액티비티를 그대로 사용하라는 플래그

* 액티비티를 다시 띄울때 onCreate() 호출이 되지 않으므로 onNewIntent()메소드를 제정의 해서 사용


 Intent intent = new Intent(getBaseContext(), AnotherActivity.class);
 intent.putExtra(“startCount”,String.valueOf(startCount));
 intent.setFlags(Intent.FALG_ACTIVITY_SINGLE_TOP);
 startActivityForResult(intent,REQUEST_CODE_ANOTHER);

                             AnotherActivity.java
 onCreate(){} // 인텐트가 없으면 이 함수 호출

 onNewIntent(Intent newIntent) // 인텐트가 있으면 이함수 호출
 {
   Intent receivedIntnet = getIntent();
   String startCount = receivedIntent.getStringExtra(“startCount”);
 }
인텐트와 데이터 전달
 부가데이터

 Intent putExtra(String name, String)
 Intent putExtra(string name, int)
 Intent putExtra(string name, boolean)

 String getStringExtra(String name)
 Int getIntExtra(String name, int defaultValue)
 Boolean getBooleanExtra(String name, boolean defaultValue)



객체 자체는 전달할수 없는 단점이 있다. 그래서 데이터를 배열을로직렬화
,Serializable 인터페이스를 사용하여 전달할 수 있다. 하지만 안드로이드에선
Parcelable 인터페이스를 권장하는데 내부적인 전달 메커니즘이 만들어져
있기 때문이다.
인텐트와 데이터 전달
Parcelable 인터페이스
Public abstract int describeContents()
Public abstract void writeToParcel(Parcel dest, int flags)
- readXXX() , writeXXX() 메소드 기본제공
- CREATOR 이라는 상수를 만들어서 객체를 생성 (반드시 static final 선언)
- implements Pacelable

Static final string KEY_SIMPLE_DATA = “oracle data”
SimpleData data = new SimpleData(100,”hello”);
Intent.putExtra(KEY_SIMPLE_DATA,data)


                               SimpleData class

Bundle bundle = getIntent(),getExtras()
SimpleData data = (SimpleData)bundle.getParcelable(KEY_SIMPLE_DATA)
txtMsg.setText(“Number: “ + data.getNumber() +”Msg: “ +data.getMessage());
어플리케이션 수명주기
                      onCreate()
                      onStart()
                      onResume()

                           실행               게임도중 전화가 오면 현제상황을
                                            저장후 다시 돌아가야한다.
                                            onPause() : 현제상태 저장
              onResume()        onPause()
                                            onResume() : 다시실행

                       일시정지

                            onStop()        onSaveInstanceState()
                                            onRestoreInstaceState()
onRestart()
                           정지

                            onDestroy()

                           소멸
서비스
서비스 : 액티비티 화면 없이 백그라운드에서 실행되는 프로세스
startService(MyIntent) <-> stopService(MyIntent);

Public class MyService Extends Service implements Runnable
{
          onCreate(){
                     Thread myThread = new Thread(this);
                     myThread.start()
                     }
          public void run(){}
          public Ibinder onBind(Intent arg0){}
}
<service android:name=“MyService” android:enabled=“ture”>
</service>
브로드캐스트 수신자
브로드캐스트 수신자: 어떤 메시지를 받고 싶다고 등록하면 그 메시지가
            이 애플리케이션에 전달되는 방식

           public class SMSBroadcastReceiver extends BroadcastReceiver
           {
               public static final String TAG = "SMSBroadcastReceiver";
           @Override
               public void onReceive(Context context, Intent intent)
               {
               Log.i(TAG, "onReceive() called.");
           // check if SMS global event is received
               if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
               {
                        Log.i(TAG, "SMS received.");
           // abort this one
                        abortBroadcast(); // 더 이상 다른 수신자에게 메시지 보내지 말라는것.
                        }
                }
           }



   <receiver android:name=".SMSBroadcastReceiver">
                     <intent-filter android:priority="10001"> // 전달 우선순위 숫자가 클수록 우선순위가 높다
                                       <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                    </intent-filter>
   </receiver>

Más contenido relacionado

La actualidad más candente

Naver api for android
Naver api for androidNaver api for android
Naver api for android
Sangon Lee
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
Yong Joon Moon
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
Yong Joon Moon
 

La actualidad más candente (20)

Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법
 
Xe hack
Xe hackXe hack
Xe hack
 
Java project master
Java project masterJava project master
Java project master
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기
 
Java project
Java projectJava project
Java project
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Naver api for android
Naver api for androidNaver api for android
Naver api for android
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
[스프링 스터디 2일차] 서비스 추상화
[스프링 스터디 2일차] 서비스 추상화[스프링 스터디 2일차] 서비스 추상화
[스프링 스터디 2일차] 서비스 추상화
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 

Destacado

[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
NAVER D2
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초
hylo926
 
致明天的我们 20120606
致明天的我们 20120606致明天的我们 20120606
致明天的我们 20120606
cash0430
 
Suit up Presentation
Suit up PresentationSuit up Presentation
Suit up Presentation
owildman
 
3. simple present tense 1
3. simple present tense 13. simple present tense 1
3. simple present tense 1
Jorge Zavarce
 
Становище на НПНПО по Стратегия за НПО
Становище на НПНПО по Стратегия за НПОСтановище на НПНПО по Стратегия за НПО
Становище на НПНПО по Стратегия за НПО
CIL - Sofia
 
Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2
stefany
 
NewTest-910080.ppt
NewTest-910080.pptNewTest-910080.ppt
NewTest-910080.ppt
IQM123
 
Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2
stefany
 

Destacado (20)

Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초
 
La guerra di piero
La guerra di pieroLa guerra di piero
La guerra di piero
 
Public Speaking For Scientists
Public Speaking For ScientistsPublic Speaking For Scientists
Public Speaking For Scientists
 
Memòria
MemòriaMemòria
Memòria
 
致明天的我们 20120606
致明天的我们 20120606致明天的我们 20120606
致明天的我们 20120606
 
Website usability ideas for business growth
Website usability ideas for business growthWebsite usability ideas for business growth
Website usability ideas for business growth
 
Sensorize FreeRehab
Sensorize FreeRehabSensorize FreeRehab
Sensorize FreeRehab
 
Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2
 
Suit up Presentation
Suit up PresentationSuit up Presentation
Suit up Presentation
 
October 2014 UK Commercial Bulletin
October 2014 UK Commercial BulletinOctober 2014 UK Commercial Bulletin
October 2014 UK Commercial Bulletin
 
Cijferend optellen2
Cijferend optellen2Cijferend optellen2
Cijferend optellen2
 
3. simple present tense 1
3. simple present tense 13. simple present tense 1
3. simple present tense 1
 
Становище на НПНПО по Стратегия за НПО
Становище на НПНПО по Стратегия за НПОСтановище на НПНПО по Стратегия за НПО
Становище на НПНПО по Стратегия за НПО
 
Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2
 
NewTest-910080.ppt
NewTest-910080.pptNewTest-910080.ppt
NewTest-910080.ppt
 
Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2Universidad de san bueneventura –cartagena2
Universidad de san bueneventura –cartagena2
 

Similar a Android 기초강좌 애플리캐이션 구조

안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
jangpd007
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
LGU+
 

Similar a Android 기초강좌 애플리캐이션 구조 (20)

Nest js 101
Nest js 101Nest js 101
Nest js 101
 
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
 
2. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part22. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part2
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
Vue.js 기초 실습.pptx
Vue.js 기초 실습.pptxVue.js 기초 실습.pptx
Vue.js 기초 실습.pptx
 
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
 
안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Android Google Cloud Message 설정
Android Google Cloud Message 설정Android Google Cloud Message 설정
Android Google Cloud Message 설정
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 

Más de Sangon Lee (9)

NoSQL Guide & Sample
NoSQL Guide &  SampleNoSQL Guide &  Sample
NoSQL Guide & Sample
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsing
 
Facebook api
Facebook apiFacebook api
Facebook api
 
번역돋보기 기획서
번역돋보기 기획서번역돋보기 기획서
번역돋보기 기획서
 
StudyShare
StudyShareStudyShare
StudyShare
 
Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초
 

Último

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Último (7)

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

Android 기초강좌 애플리캐이션 구조

  • 1. S.O.Lab develop by 이상온 ANDROID 기초강좌
  • 2. Android 개발환경 구축 JAVA Eclipse Eclipse 안에 Android Develop Kit 설치 ADT SDK SDK for Windows 애뮬레이터 셋팅 및 안드로이드 플랫폼 패키지 설치 예: Android 2.2.3(API 10), Android 4.0 (API 14)
  • 3. Android App 의 구조 Java coding 구현 부분 (2)’’main”으로 설정한 값 참조 Main page 디자인 구성파일 (1)’hello’로 설정한 값 참조 XML 태그속성을 정의 예: hello => helloworld~!! App 환경설정 및 시작
  • 4. Android App 가지고 놀기1 setContentView(R.layout.main) res/layout/main.xml -> @string/hello Res/values/strings.xml ID : android:id : 레이아웃 파일에 외부에서 참조할ID findViewById() : 자바코드에서 레이아웃 파일 찾기 OnClickListener : 참조한 객체 이벤트 처리코드
  • 5. Android App 가지고 놀기2 <Button android:id="@+id/startBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> @+id : 리소스 정보에 추가. @id : 기존리소스 참조 import android.widget.*; import android.view.*; import android.view.View.OnClickListener; public class HelloworldActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button startbtn = (Button)findViewById(R.id.startBtn); startbtn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Toast.makeText(getApplicationContext(), "시작버튼 룰럿음.....", 1000).show(); } }); } }
  • 6. Android App 가지고 놀기3 public class NewActivity extends Activity {} 새로운 화면 만들기 <Button android:id="@+id/backBtn" 1. 새로운 액티비티 만들기 android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@메인으로 돌아가기" 2. 새로운 레이아웃 만들기 /> <activity android:name=".NewActivity"> 3. 메니페스트 태그 추가하기 </activity> 4. 액티비티 코드 추가하기 setContentView(R.layout.newActivity); Intent myIntent = new Intent(getApplicationContext(),NewActivity.class); startActivity(myIntent); Intent :하고자 하는 행위를 의미하는 것으로 서로간의 데이터 전달이나 원하는 기능이 무엇인지를 알려주는 역할을 한다.
  • 7. LayOut Inflation Inflation : XML파일의 레이아웃에 정의된 내용이 메모리상에 올라가는 과정 자주 사용될 Xml layout을 미리 정의후 필요한 레이아웃에 재사용 방법 setContentView() LayoutInflator class getSystemService() LinearLayout loginLayout = (LinearLayout) findViewById(R.id.loginLayout); LayoutInflater inflater = (LayoutInflater) getSystemService(context.LAYOUT_INFLATER_SERVICE); Inflater.inflate(R.layout.login, loginLayout, true); Main.xml Login.xml
  • 8. 화면 구성과 화면이동 안드로이드 구성 4대요소 1. 액티비티 2. 서비스 AndroidManifest.xml 3. 브로드캐스트 수신자 4. Content provider setContentView() -> startActivity() Intent tempintent = new Intent(getBaseContext(),AnotherActivity,class) startActivityForResult(tempintent, requestcode); onActivityResult(requestcode, resultcode, Data); 띄워졌던 액티비티를 닫을때 보내온 응답데이터를 처리할수 있다. Requestcode, resultcode 는 사용자가 마음대로 정의할수있다.
  • 9. 인텐트와 데이터 전달 Android.content.Intent 페키지 startActivity() startService() & bindService() boradcastIntent() Intent의 기본구조 : 액션 (action) + 데이터 (Data) Intent myActivity = new Intent(Intent.ACTION_DIAL, Uri.parse(myData); ComponentName name = new ComponentName(“com.solab.test.basic”, ”com.solab.test.basic.AnotherActivity”); Intent.setComponent(name); startActivityForResult(intent, REQUEST_CODE_ANOTHER);
  • 10. 인텐트와 데이터 전달 Activity A Activity B 인텐트: 액션+데이터 startActivityForResult() requestCode setResult() onActivityResult() requestCode resultCode Optional data 암시적 인텐트 : PDF파일을 열때 많은 뷰어앱들이 있으므로 시스템으로 요청을 보내면 선택한 뷰어로 보여주게 되는 방법
  • 11. 인텐트와 데이터 전달 Uri path = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path, “application/pdf”); // MIME 타입지정 Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Flag & 인텐트 스택 액티비티가 새롭게 생성되면 스택의 형태로 액티비티가 쌓이게 된다. 가장 나중에 생성된 액티비티가 화면에 보이게 되며 스택의 최 상의에 위치하게 되지만 중복되는 액티비티가 리소스 낭비를 시키게된다. 이 문제를 해결하기 위한 방법중 대표적인것이 FLAG 이다. FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_NO_HISTORY // 스택추가없이 액티비티 생성 FLAG_ACTIVITY_CLEAR_TOP // 부모 제외모든 액티비티 종료후 생성
  • 12. 인텐트와 데이터 전달 FLAG_ACTIVITY_SINGLE_TOP : 액티비티 생성시 이미 생성된 액티비티 있으면 그 액티비티를 그대로 사용하라는 플래그 * 액티비티를 다시 띄울때 onCreate() 호출이 되지 않으므로 onNewIntent()메소드를 제정의 해서 사용 Intent intent = new Intent(getBaseContext(), AnotherActivity.class); intent.putExtra(“startCount”,String.valueOf(startCount)); intent.setFlags(Intent.FALG_ACTIVITY_SINGLE_TOP); startActivityForResult(intent,REQUEST_CODE_ANOTHER); AnotherActivity.java onCreate(){} // 인텐트가 없으면 이 함수 호출 onNewIntent(Intent newIntent) // 인텐트가 있으면 이함수 호출 { Intent receivedIntnet = getIntent(); String startCount = receivedIntent.getStringExtra(“startCount”); }
  • 13. 인텐트와 데이터 전달 부가데이터 Intent putExtra(String name, String) Intent putExtra(string name, int) Intent putExtra(string name, boolean) String getStringExtra(String name) Int getIntExtra(String name, int defaultValue) Boolean getBooleanExtra(String name, boolean defaultValue) 객체 자체는 전달할수 없는 단점이 있다. 그래서 데이터를 배열을로직렬화 ,Serializable 인터페이스를 사용하여 전달할 수 있다. 하지만 안드로이드에선 Parcelable 인터페이스를 권장하는데 내부적인 전달 메커니즘이 만들어져 있기 때문이다.
  • 14. 인텐트와 데이터 전달 Parcelable 인터페이스 Public abstract int describeContents() Public abstract void writeToParcel(Parcel dest, int flags) - readXXX() , writeXXX() 메소드 기본제공 - CREATOR 이라는 상수를 만들어서 객체를 생성 (반드시 static final 선언) - implements Pacelable Static final string KEY_SIMPLE_DATA = “oracle data” SimpleData data = new SimpleData(100,”hello”); Intent.putExtra(KEY_SIMPLE_DATA,data) SimpleData class Bundle bundle = getIntent(),getExtras() SimpleData data = (SimpleData)bundle.getParcelable(KEY_SIMPLE_DATA) txtMsg.setText(“Number: “ + data.getNumber() +”Msg: “ +data.getMessage());
  • 15. 어플리케이션 수명주기 onCreate() onStart() onResume() 실행 게임도중 전화가 오면 현제상황을 저장후 다시 돌아가야한다. onPause() : 현제상태 저장 onResume() onPause() onResume() : 다시실행 일시정지 onStop() onSaveInstanceState() onRestoreInstaceState() onRestart() 정지 onDestroy() 소멸
  • 16. 서비스 서비스 : 액티비티 화면 없이 백그라운드에서 실행되는 프로세스 startService(MyIntent) <-> stopService(MyIntent); Public class MyService Extends Service implements Runnable { onCreate(){ Thread myThread = new Thread(this); myThread.start() } public void run(){} public Ibinder onBind(Intent arg0){} } <service android:name=“MyService” android:enabled=“ture”> </service>
  • 17. 브로드캐스트 수신자 브로드캐스트 수신자: 어떤 메시지를 받고 싶다고 등록하면 그 메시지가 이 애플리케이션에 전달되는 방식 public class SMSBroadcastReceiver extends BroadcastReceiver { public static final String TAG = "SMSBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "onReceive() called."); // check if SMS global event is received if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Log.i(TAG, "SMS received."); // abort this one abortBroadcast(); // 더 이상 다른 수신자에게 메시지 보내지 말라는것. } } } <receiver android:name=".SMSBroadcastReceiver"> <intent-filter android:priority="10001"> // 전달 우선순위 숫자가 클수록 우선순위가 높다 <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>