h3 2011 안드로이드의 seamless ux를 위한 activity 활용전략
DESCRIPTION
TRANSCRIPT
안드로이드의 Seamless UX를 위한 Activity 활용전략 Android앱팀 I 오종인
2
이런 얘기를 하려고 합니다
Android vs. iOS 01
Application, Activity, Task 02
기본 동작 Review 03
Case Study 04
3
무엇이 무엇이 똑같을까?
4
진정 이런 것을 원하세요?
Application, Activity, Task 02
6
Application
Application 구조부터 달라요!
Process
Application
기능&화면
기능&화면 기능&화면
기능&화면 기능&화면
Activity Activity
Content Provider
Service
7
Application
Application 구조부터 달라요!
Process
화면과 기능의 분리
Activity Activity 화면
Content Provider
Service
기능
8
Activity는?
public class Calculator extends Activity
9
잠시 다른 얘기…
10
Application을 종료하고 싶어요~
11
이렇게 하면 된대요!
((ActivityManager)getSystemService(ACTIVITY_SERVICE))
.restartPackage(getPackageName());
System.exit(0);
Process.killProcess(Process.myPid());
12
그런데, 왜 종료해야 하나요?
안드로이드가 알아서 !
Low Memory Killer !
13
종료에 대해서 신경 끄세요!
Application은 항상 실행 중인 상태라는 경험을 제공
2
1
모바일 앱 사용 패턴은 소수의 앱을 반복적으로
최근 사용한 앱
14
찾아보세요!
Phone Application
Message Browser
Settings
15
동작을 이해해 보아요~
Activity는 Stack에 쌓임
Activity 1
Start Activity 2
Activity 1
Activity Test
Activity 2
Start Activity 3
Activity 2
Activity Test
Activity 1
Activity 3
Start Activity 4
Activity 3
Activity Test
Activity 2
Activity 1
Activity 2
Start Activity 3
Activity 3
Activity Test
Activity 2
Activity 1
TASK
16
Application
Process
Content Provider
Service
남의 어플에 숟가락 얹기
Application
Process
Activity 1 Task
Content Provider
Service
Activity 3 Activity 2 Activity 4
Activity 3
Activity 2
Activity 1
17
복잡해요, Launch Mode
Launch mode에 의해서 다양한 동작으로 구성 가능
☞ standard, singleTask, singleTop, singleInstance
18
그런데, 이럴 때 필요합니다.
1
Notification에서 Activity 실행 시 고려 필수
2
새로운 Activity 생성 또는 실행 중인 Activity를 사용
페북 메신저!
19
facebook 메신저를 살펴 보아요~
1
대화 상대 목록은 재사용
2
채팅 진행 중인 화면은 재사용
3
신규 채팅 화면은 새로운 Activity 생성
기본 동작 Review 03
21
벌써 잊으셨어요? 원래 있던 건데..
MENU
BACK
22
보이는 모양이 바뀐 것일 뿐...
1
화면에서 실행할 수 있는 추가 기능 목록
Option Menu
2
사용자가 기대하는 기능을 메뉴 키를 눌렀을 때 찾을 수 있도록 배치
23
문맥(=Context) 이라 굽쇼?
1
목록에서 상세 화면 진입 없이 선택 항목의 관련기능 수행
Context Menu
24
빠른 접촉? 교제?
프로필 이미지 선택 시, 연락처 관련 기능의 빠른 수행
1
2
연락처 기능 외에 Quick Action으로 부가 기능 수행도 가능
Quick Contact
Case Study 04
26
브라우저를 비교해 볼까요?
27
종료는 앞서 말씀 드렸죠? 정말 쓸데없는 짓!
28
팝업의 감동을 알려드립니다~
29
Seesmic을 아시나요?
1
재 실행 시 이전 상태로 빠르게 복원
2
Menu, Context Menu 등 기본 동작에 충실
3
탄탄한 시나리오, 이미지 대신 색을 이용
30
많이 쓰고 계시죠? handcent SMS app
1
사용자 데이터 유실 없음
2
위젯의 효과적 사용, 정보 제공 및 단축 아이콘 기능 수행
임시보관함
31
기억나시나요? “네이버-다음 구글 공정위 제소…”
32
기억나시나요? “네이버-다음 구글 공정위 제소…”
<provider android:name="MruNameProvider" android:authorities="kth_employee_name_mru"/>
<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>
33
검색 동작을 자세히 살펴보면…
KTH 직원검색 App
Task Activity 1 Activity 2
Android Search
Activity 3
Activity 4
Activity 4
Content Provider Activity 2
Activity 1
Task
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>
35
facebook 거저먹기 : Single Sign On
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); }
37
접속해 보세요~ : OpenIntents.org
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
39
바코드 스캔
http://www.openintents.org/en/node/679
40
저희부터 할께요!
41
무찌르자 애플!!!! 타도 애플!!!
42
각자의 길로 가는 게 좋겠죠?
43
밑줄 쫙~
Application은 항상 실행 중인 상태라는 경험을 제공 사용자에게는 기능의 연속성이 중요함 Activity 재 실행 시 마지막 상태를 최대한 복원 Low Memory Killer에 의한 종료 시나리오에 대비
1
44
똥글뱅이!
Android 기본 동작 준수
[MENU], [BACK]키 동작 Option Menu, Context Menu, Quick Contact 등
적절하게 사용 Low Memory Killer에 의한 종료 시나리오에 대비
2
45
형광펜!
사용자 알림은 용도에 맞게
POP-UP은 불가피한 경우만
중요한 이벤트에 사용자 대응이 꼭 필요한 경우 사용자 입력 데이터 유실 문제가 있을 때
Toast는 focus를 뺏지는 않지만
어떤 동작에 대한 안내인지 명시적으로 표시
3
46
이것도!
4
Search, Share 등 사용자가 예상하는 경로에 기능 배치
47
One more thing!
5
동일 서비스일 지라도 iOS와 Android의 UX는 별도로 접근