SlideShare a Scribd company logo
1 of 48
Download to read offline
안드로이드의
Seamless UX를 위한
Activity 활용전략
Android앱팀 I 오종인
이런 얘기를 하려고 합니다




    01 Android vs. iOS

    02 Application, Activity, Task

    03 기본 동작 Review

    04 Case Study

2
무엇이 무엇이 똑같을까?




3
진정 이런 것을 원하세요?




4
02 Application, Activity, Task
Application 구조부터 달라요!




        Application            Application

                                 Process

    기능&화면       기능&화면
                          Activity             Activity



            기능&화면
                             Content Provider



                                     Service
    기능&화면       기능&화면




6
Application 구조부터 달라요!




                             Application

                               Process


                 화면     Activity             Activity


    화면과 기능의 분리
                           Content Provider

                 기능
                                   Service




7
Activity는?




    public class Calculator extends Activity




8
잠시 다른 얘기…




9
Application을 종료하고 싶어요~




10
이렇게 하면 된대요!




     Process.killProcess(Process.myPid());



     System.exit(0);



     ((ActivityManager)getSystemService(ACTIVITY_SERVICE))
        .restartPackage(getPackageName());


11
그런데, 왜 종료해야 하나요?




     안드로이드가 알아서 !



     Low Memory Killer !

12
종료에 대해서 신경 끄세요!




                1
                    모바일 앱 사용 패턴은
     최근 사용한 앱
                    소수의 앱을 반복적으로


                2
                    Application은
                    항상 실행 중인 상태라는
                    경험을 제공


13
찾아보세요!



            Phone
          Application


     Message    Browser   Settings



            E-mail

14
동작을 이해해 보아요~

     Activity Test        Activity Test        Activity Test            Activity Test


         Activity 1           Activity 2           Activity 3               Activity 2

       Start Activity 2     Start Activity 3     Start Activity 4          Start Activity 3




         Activity 1           Activity 2           Activity 3               Activity 3

                              Activity 1           Activity 2               Activity 2

                                                   Activity 1               Activity 1


     Activity는 Stack에 쌓임                                            TASK
15
남의 어플에 숟가락 얹기



           Application                        Application

             Process                            Process



     Activity 1     Activity 3   Task   Activity 2     Activity 4




        Content Provider                   Content Provider


                                                           Activity 3
              Service                            Service
                                                           Activity 2

                                                           Activity 1

16
복잡해요, Launch Mode


     Launch mode에 의해서 다양한 동작으로 구성 가능




     ☞ standard, singleTask, singleTop, singleInstance
17
그런데, 이럴 때 필요합니다.




               1
                   Notification에서
                   Activity 실행 시 고려 필수

     페북 메신저!   2
                   새로운 Activity 생성
                   또는
                   실행 중인 Activity를 사용


18
facebook 메신저를 살펴 보아요~



     1
         대화 상대 목록은 재사용


     2
         채팅 진행 중인 화면은
         재사용

     3
         신규 채팅 화면은
         새로운 Activity 생성

19
03 기본 동작 Review
벌써 잊으셨어요? 원래 있던 건데..


          MENU




           BACK




21
보이는 모양이 바뀐 것일 뿐...


     Option Menu
                   1
                       화면에서 실행할 수 있는
                       추가 기능 목록


                   2
                       사용자가 기대하는 기능을
                       메뉴 키를 눌렀을 때
                       찾을 수 있도록 배치

22
문맥(=Context) 이라 굽쇼?


     Context Menu
                    1
                        목록에서
                        상세 화면 진입 없이
                        선택 항목의 관련기능 수행




23
빠른 접촉? 교제?


     Quick Contact
                     1
                         프로필 이미지 선택 시,
                         연락처 관련 기능의
                         빠른 수행

                     2
                         연락처 기능 외에
                         Quick Action으로
                         부가 기능 수행도 가능

24
04 Case Study
브라우저를 비교해 볼까요?




26
종료는 앞서 말씀 드렸죠? 정말 쓸데없는 짓!




27
팝업의 감동을 알려드립니다~




28
Seesmic을 아시나요?



     1
         재 실행 시 이전 상태로
         빠르게 복원
     2
         Menu, Context Menu 등
         기본 동작에 충실

     3
         탄탄한 시나리오,
         이미지 대신 색을 이용

29
많이 쓰고 계시죠? handcent SMS app




     임시보관함   1
                 사용자 데이터 유실 없음




             2
                 위젯의 효과적 사용,
                 정보 제공 및
                 단축 아이콘 기능 수행

30
기억나시나요? “네이버-다음 구글 공정위 제소…”




31
기억나시나요? “네이버-다음 구글 공정위 제소…”




     <activity android:name=".EmployeeSearch“>
         <!-- Receives the search request. -->
         <intent-filter>
             <action android:name="android.intent.action.SEARCH" />
             <category android:name="android.intent.category.DEFAULT" />
         </intent-filter>

         <!-- Points to searchable meta data. -->
         <meta-data android:name="android.app.searchable“
                    android:resource="@xml/searchable"/>
     </activity>


     <provider android:name="MruNameProvider"
                     android:authorities="kth_employee_name_mru"/>
32
검색 동작을 자세히 살펴보면…


         Android Search                    KTH 직원검색 App




                                                          Activity 4
                                 Task
     Activity 3     Activity 1          Activity 2       Activity 4




         Task
                                             Content Provider
      Activity 2

      Activity 1

33
나는 꼽사리다! “공유” 기능!




     <activity android:name=".MyShare">
         <intent-filter>
             <action android:name="android.intent.action.SEND"/>
             <category android:name="android.intent.category.DEFAULT"/>
             <data android:mimeType="image/*"/>
             <data android:mimeType="video/*"/>
             <data android:mimeType="text/plain" />
         </intent-filter>
     </activity>
34
facebook 거저먹기 : Single Sign On




35
facebook 거저먹기 II




     String uri = "fb://page/" + yourFBpageId;
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));

     try {
        startActivity(intent);
     } catch (ActivityNotFoundException ex) {
        // facebook 공식 앱이 존재하지 않을 경우에는
        // Web browser로 동일 화면을 보여준다.
        String uri = "http://touch.facebook.com/pages/x/" + yourFBpageId;
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        startActivity(i);
     }



36
접속해 보세요~ : OpenIntents.org




37
참고 하세요~


     Title           Action

     프린트             com.rcreations.send2printer.print


     소리 크기 조절        org.openintents.audio.action_volume_update


     색깔 선택           org.openintents.action.PICK_COLOR


     바코드 스캔          com.google.zxing.client.android.SCAN


     Flickr photo    com.google.android.photostream.FLICKR_PHOTO


     Flickr stream   com.google.android.photostream.FLICKR_STREAM


38
바코드 스캔




http://www.openintents.org/en/node/679


39
저희부터 할께요!




40
무찌르자 애플!!!! 타도 애플!!!




41
각자의 길로 가는 게 좋겠죠?




42
밑줄 쫙~




     1


     Application은
     항상 실행 중인 상태라는
     경험을 제공
      사용자에게는 기능의 연속성이 중요함
      Activity 재 실행 시 마지막 상태를 최대한 복원
      Low Memory Killer에 의한 종료 시나리오에 대비

43
똥글뱅이!




     2


     Android 기본 동작 준수
      [MENU], [BACK]키 동작
      Option Menu, Context Menu, Quick Contact 등
       적절하게 사용
      Low Memory Killer에 의한 종료 시나리오에 대비




44
형광펜!




     3


     사용자 알림은 용도에 맞게
        POP-UP은 불가피한 경우만
        중요한 이벤트에 사용자 대응이 꼭 필요한 경우
        사용자 입력 데이터 유실 문제가 있을 때
        Toast는 focus를 뺏지는 않지만
         어떤 동작에 대한 안내인지 명시적으로 표시



45
이것도!




     4


     Search, Share 등
     사용자가 예상하는 경로에
     기능 배치


46
One more thing!




     5


     동일 서비스일 지라도
     iOS와 Android의 UX는
     별도로 접근


47
감사합니다.
모바일개발실 / Android앱팀 팀장 / 오종인
      ohjongin@kthcorp.com
              @ji5

More Related Content

Similar to H3 2011 안드로이드의 Seamless UX를 위한 Activity 활용전략_Android팀_오종인

[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?NAVER Engineering
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드NAVER Engineering
 
안드로이드스터디 10
안드로이드스터디 10안드로이드스터디 10
안드로이드스터디 10jangpd007
 
ScriptRunner 꼼지락꼼지락
ScriptRunner 꼼지락꼼지락ScriptRunner 꼼지락꼼지락
ScriptRunner 꼼지락꼼지락Yunseok Lee
 
Cep 소개 - for developers
Cep 소개 - for developersCep 소개 - for developers
Cep 소개 - for developersJuhyeon Lee
 
유저해빗(UserHabit) 서비스 소개서 요약본
유저해빗(UserHabit) 서비스 소개서 요약본유저해빗(UserHabit) 서비스 소개서 요약본
유저해빗(UserHabit) 서비스 소개서 요약본Ha ji Yoon
 
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)keesung kim
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험Lee Sang-Ho
 
서비스소개서Ver4
서비스소개서Ver4서비스소개서Ver4
서비스소개서Ver4Joo Hyung Yaw
 
유저해빗 서비스 소개서
유저해빗 서비스 소개서유저해빗 서비스 소개서
유저해빗 서비스 소개서Joo Hyung Yaw
 
iOS Human Interface Guidelines 한글 정리 문서입니다.
iOS Human Interface Guidelines 한글 정리 문서입니다.iOS Human Interface Guidelines 한글 정리 문서입니다.
iOS Human Interface Guidelines 한글 정리 문서입니다.Dong Jin Lee
 

Similar to H3 2011 안드로이드의 Seamless UX를 위한 Activity 활용전략_Android팀_오종인 (11)

[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
 
안드로이드스터디 10
안드로이드스터디 10안드로이드스터디 10
안드로이드스터디 10
 
ScriptRunner 꼼지락꼼지락
ScriptRunner 꼼지락꼼지락ScriptRunner 꼼지락꼼지락
ScriptRunner 꼼지락꼼지락
 
Cep 소개 - for developers
Cep 소개 - for developersCep 소개 - for developers
Cep 소개 - for developers
 
유저해빗(UserHabit) 서비스 소개서 요약본
유저해빗(UserHabit) 서비스 소개서 요약본유저해빗(UserHabit) 서비스 소개서 요약본
유저해빗(UserHabit) 서비스 소개서 요약본
 
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)
모바일시대의프로토타이핑 (@웹월드컨퍼런스, 2014.11.19)
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험
 
서비스소개서Ver4
서비스소개서Ver4서비스소개서Ver4
서비스소개서Ver4
 
유저해빗 서비스 소개서
유저해빗 서비스 소개서유저해빗 서비스 소개서
유저해빗 서비스 소개서
 
iOS Human Interface Guidelines 한글 정리 문서입니다.
iOS Human Interface Guidelines 한글 정리 문서입니다.iOS Human Interface Guidelines 한글 정리 문서입니다.
iOS Human Interface Guidelines 한글 정리 문서입니다.
 

More from KTH, 케이티하이텔

[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221KTH, 케이티하이텔
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환KTH, 케이티하이텔
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주KTH, 케이티하이텔
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기KTH, 케이티하이텔
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈KTH, 케이티하이텔
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기KTH, 케이티하이텔
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기KTH, 케이티하이텔
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for AppspressoKTH, 케이티하이텔
 
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략KTH, 케이티하이텔
 
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터KTH, 케이티하이텔
 
[H3 2012] Local based SNS를 이용한 타겟 마케팅
[H3 2012] Local based SNS를 이용한 타겟 마케팅[H3 2012] Local based SNS를 이용한 타겟 마케팅
[H3 2012] Local based SNS를 이용한 타겟 마케팅KTH, 케이티하이텔
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기KTH, 케이티하이텔
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화KTH, 케이티하이텔
 
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0KTH, 케이티하이텔
 
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.KTH, 케이티하이텔
 
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'KTH, 케이티하이텔
 
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자[H3 2012] OAuth2 - API 인증을위한 만능 도구상자
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자KTH, 케이티하이텔
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEPKTH, 케이티하이텔
 

More from KTH, 케이티하이텔 (20)

[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환
KTH_Detail day_안드로메다에서 온 디자이너이야기_3차_디자인기본요소_박지환
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(2)_디자인사례_정덕주
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기
KTH_Detail day_안드로메다에서 온 디자이너이야기_2차(1)_디자인프로세스,협업_한재기
 
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈
KTH_Detail day_안드로메다에서 온 디자이너이야기_1차_디자인용어_지훈
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
 
[H3 2012] UX, 애자일하고 싶어요
[H3 2012] UX, 애자일하고 싶어요[H3 2012] UX, 애자일하고 싶어요
[H3 2012] UX, 애자일하고 싶어요
 
[H3 2012] Instant Prototyping with ROR
[H3 2012] Instant Prototyping with ROR[H3 2012] Instant Prototyping with ROR
[H3 2012] Instant Prototyping with ROR
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
 
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
 
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터
[H3 2012] 스타트업 개발사의 생존필수 아이템, BaaS 모바일 고객센터
 
[H3 2012] Local based SNS를 이용한 타겟 마케팅
[H3 2012] Local based SNS를 이용한 타겟 마케팅[H3 2012] Local based SNS를 이용한 타겟 마케팅
[H3 2012] Local based SNS를 이용한 타겟 마케팅
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
 
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0
[H3 2012] 하이브리드앱 제작 사례 공유 - 푸딩얼굴인식 3.0
 
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.
[H3 2012] Cloud Database Service - Hulahoop를 소개합니다.
 
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'
[H3 2012] 기획/디자인/개발자 모두 알아야 하는 '대박앱의 비밀'
 
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자[H3 2012] OAuth2 - API 인증을위한 만능 도구상자
[H3 2012] OAuth2 - API 인증을위한 만능 도구상자
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
 

H3 2011 안드로이드의 Seamless UX를 위한 Activity 활용전략_Android팀_오종인

  • 1. 안드로이드의 Seamless UX를 위한 Activity 활용전략 Android앱팀 I 오종인
  • 2. 이런 얘기를 하려고 합니다 01 Android vs. iOS 02 Application, Activity, Task 03 기본 동작 Review 04 Case Study 2
  • 4. 진정 이런 것을 원하세요? 4
  • 6. Application 구조부터 달라요! Application Application Process 기능&화면 기능&화면 Activity Activity 기능&화면 Content Provider Service 기능&화면 기능&화면 6
  • 7. Application 구조부터 달라요! Application Process 화면 Activity Activity 화면과 기능의 분리 Content Provider 기능 Service 7
  • 8. Activity는? public class Calculator extends Activity 8
  • 11. 이렇게 하면 된대요! Process.killProcess(Process.myPid()); System.exit(0); ((ActivityManager)getSystemService(ACTIVITY_SERVICE)) .restartPackage(getPackageName()); 11
  • 12. 그런데, 왜 종료해야 하나요? 안드로이드가 알아서 ! Low Memory Killer ! 12
  • 13. 종료에 대해서 신경 끄세요! 1 모바일 앱 사용 패턴은 최근 사용한 앱 소수의 앱을 반복적으로 2 Application은 항상 실행 중인 상태라는 경험을 제공 13
  • 14. 찾아보세요! Phone Application Message Browser Settings E-mail 14
  • 15. 동작을 이해해 보아요~ Activity Test Activity Test Activity Test Activity Test Activity 1 Activity 2 Activity 3 Activity 2 Start Activity 2 Start Activity 3 Start Activity 4 Start Activity 3 Activity 1 Activity 2 Activity 3 Activity 3 Activity 1 Activity 2 Activity 2 Activity 1 Activity 1 Activity는 Stack에 쌓임 TASK 15
  • 16. 남의 어플에 숟가락 얹기 Application Application Process Process Activity 1 Activity 3 Task Activity 2 Activity 4 Content Provider Content Provider Activity 3 Service Service Activity 2 Activity 1 16
  • 17. 복잡해요, Launch Mode Launch mode에 의해서 다양한 동작으로 구성 가능 ☞ standard, singleTask, singleTop, singleInstance 17
  • 18. 그런데, 이럴 때 필요합니다. 1 Notification에서 Activity 실행 시 고려 필수 페북 메신저! 2 새로운 Activity 생성 또는 실행 중인 Activity를 사용 18
  • 19. facebook 메신저를 살펴 보아요~ 1 대화 상대 목록은 재사용 2 채팅 진행 중인 화면은 재사용 3 신규 채팅 화면은 새로운 Activity 생성 19
  • 21. 벌써 잊으셨어요? 원래 있던 건데.. MENU BACK 21
  • 22. 보이는 모양이 바뀐 것일 뿐... Option Menu 1 화면에서 실행할 수 있는 추가 기능 목록 2 사용자가 기대하는 기능을 메뉴 키를 눌렀을 때 찾을 수 있도록 배치 22
  • 23. 문맥(=Context) 이라 굽쇼? Context Menu 1 목록에서 상세 화면 진입 없이 선택 항목의 관련기능 수행 23
  • 24. 빠른 접촉? 교제? Quick Contact 1 프로필 이미지 선택 시, 연락처 관련 기능의 빠른 수행 2 연락처 기능 외에 Quick Action으로 부가 기능 수행도 가능 24
  • 27. 종료는 앞서 말씀 드렸죠? 정말 쓸데없는 짓! 27
  • 29. Seesmic을 아시나요? 1 재 실행 시 이전 상태로 빠르게 복원 2 Menu, Context Menu 등 기본 동작에 충실 3 탄탄한 시나리오, 이미지 대신 색을 이용 29
  • 30. 많이 쓰고 계시죠? handcent SMS app 임시보관함 1 사용자 데이터 유실 없음 2 위젯의 효과적 사용, 정보 제공 및 단축 아이콘 기능 수행 30
  • 32. 기억나시나요? “네이버-다음 구글 공정위 제소…” <activity android:name=".EmployeeSearch“> <!-- Receives the search request. --> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- Points to searchable meta data. --> <meta-data android:name="android.app.searchable“ android:resource="@xml/searchable"/> </activity> <provider android:name="MruNameProvider" android:authorities="kth_employee_name_mru"/> 32
  • 33. 검색 동작을 자세히 살펴보면… Android Search KTH 직원검색 App Activity 4 Task Activity 3 Activity 1 Activity 2 Activity 4 Task Content Provider Activity 2 Activity 1 33
  • 34. 나는 꼽사리다! “공유” 기능! <activity android:name=".MyShare"> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="image/*"/> <data android:mimeType="video/*"/> <data android:mimeType="text/plain" /> </intent-filter> </activity> 34
  • 35. facebook 거저먹기 : Single Sign On 35
  • 36. facebook 거저먹기 II String uri = "fb://page/" + yourFBpageId; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); try { startActivity(intent); } catch (ActivityNotFoundException ex) { // facebook 공식 앱이 존재하지 않을 경우에는 // Web browser로 동일 화면을 보여준다. String uri = "http://touch.facebook.com/pages/x/" + yourFBpageId; Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(i); } 36
  • 37. 접속해 보세요~ : OpenIntents.org 37
  • 38. 참고 하세요~ Title Action 프린트 com.rcreations.send2printer.print 소리 크기 조절 org.openintents.audio.action_volume_update 색깔 선택 org.openintents.action.PICK_COLOR 바코드 스캔 com.google.zxing.client.android.SCAN Flickr photo com.google.android.photostream.FLICKR_PHOTO Flickr stream com.google.android.photostream.FLICKR_STREAM 38
  • 42. 각자의 길로 가는 게 좋겠죠? 42
  • 43. 밑줄 쫙~ 1 Application은 항상 실행 중인 상태라는 경험을 제공  사용자에게는 기능의 연속성이 중요함  Activity 재 실행 시 마지막 상태를 최대한 복원  Low Memory Killer에 의한 종료 시나리오에 대비 43
  • 44. 똥글뱅이! 2 Android 기본 동작 준수  [MENU], [BACK]키 동작  Option Menu, Context Menu, Quick Contact 등 적절하게 사용  Low Memory Killer에 의한 종료 시나리오에 대비 44
  • 45. 형광펜! 3 사용자 알림은 용도에 맞게  POP-UP은 불가피한 경우만  중요한 이벤트에 사용자 대응이 꼭 필요한 경우  사용자 입력 데이터 유실 문제가 있을 때  Toast는 focus를 뺏지는 않지만 어떤 동작에 대한 안내인지 명시적으로 표시 45
  • 46. 이것도! 4 Search, Share 등 사용자가 예상하는 경로에 기능 배치 46
  • 47. One more thing! 5 동일 서비스일 지라도 iOS와 Android의 UX는 별도로 접근 47
  • 48. 감사합니다. 모바일개발실 / Android앱팀 팀장 / 오종인 ohjongin@kthcorp.com @ji5