Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

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

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 17 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

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

Publicité

Plus récents (20)

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

  1. 1. S.O.Lab develop by 이상온 ANDROID 기초강좌
  2. 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. 3. Android App 의 구조 Java coding 구현 부분 (2)’’main”으로 설정한 값 참조 Main page 디자인 구성파일 (1)’hello’로 설정한 값 참조 XML 태그속성을 정의 예: hello => helloworld~!! App 환경설정 및 시작
  4. 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. 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. 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. 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. 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. 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. 10. 인텐트와 데이터 전달 Activity A Activity B 인텐트: 액션+데이터 startActivityForResult() requestCode setResult() onActivityResult() requestCode resultCode Optional data 암시적 인텐트 : PDF파일을 열때 많은 뷰어앱들이 있으므로 시스템으로 요청을 보내면 선택한 뷰어로 보여주게 되는 방법
  11. 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. 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. 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. 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. 15. 어플리케이션 수명주기 onCreate() onStart() onResume() 실행 게임도중 전화가 오면 현제상황을 저장후 다시 돌아가야한다. onPause() : 현제상태 저장 onResume() onPause() onResume() : 다시실행 일시정지 onStop() onSaveInstanceState() onRestoreInstaceState() onRestart() 정지 onDestroy() 소멸
  16. 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. 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>

×