Splash Screens Are Evil, Don''t Use Them!
Sử dụng màn hình khởi động ứng dụng là một sai lầm, hãy dừng việc đó lại! Bài viết này được tác giản Cyril Mottier công khai từ năm 2012, có thể nhiều bạn đã quên nó, nhưng mình vẫn muốn nhắc lại ở đây. Tại sao ông lại đưa ra lời khuyên là hạn chế sử dụng hoặc nên dùng splash đúng cách. Đó là bởi ...
Sử dụng màn hình khởi động ứng dụng là một sai lầm, hãy dừng việc đó lại!
Bài viết này được tác giản Cyril Mottier công khai từ năm 2012, có thể nhiều bạn đã quên nó, nhưng mình vẫn muốn nhắc lại ở đây. Tại sao ông lại đưa ra lời khuyên là hạn chế sử dụng hoặc nên dùng splash đúng cách. Đó là bởi vì tôi thâý có rất nhiều ứng dụng hiện nay lạm dụng màn hình splash này một cách vô tội vạ. Nghe có vẻ nghiêm trọng nhưng các bạn hãy chú ý đến bài viết này (đúng hơn thì là bản dịch lại thôi)
Bài viết được dịch và có biên soạn lại một số phần cho dễ hiểu và phù hợp với những phiên bản android hiện tại từ http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/
Tác giả: Lưu ý: Những người đã đọc sách về phát triển ứng dụng android của tôi sẽ thấy bài chia sẻ này là 1 phần của chương 4 trong cuốn "UI & UX: major components for a great user experience and the Android logic". Nói thực, bài viết trên blog này là 1 bản dịch nâng cao một phần trong cuốn sách ấy của tôi. Đối với những người không biết cuốn sách này thì có thể tìm với tên gốc bằng tiếng Pháp "Développez pour Android". Nó được phát hành khoảng 1 năm trước (dịch giả: 2011, ở VN lúc bấy giờ rất phổ biến các công ty start-up ứng dụng mobile với phiên bản 1.5 và 1.6), nó về việc phát triển ứng dụng android nói chung và đặc biệt tập trung vào vấn đề tối ưu hóa ứng dụng để nâng cao trải nghiệm cho người dùng (DG: thời bấy giờ toàn điện thoại cùi chứ hok ngon như giờ). Nếu bạn quan tâm đến cuốn sách này thì bạn có thể tải về ở đây http://www.digitbooks.fr/catalogue/9782815002028.html
Phần 2: Hãy sử dụng splash theo đúng cách của nó
Splash screen là gì?
Tôi thường xuyên thấy những ứng dụng android bắt đầu với một màn hình splash, chủ yếu là giới thiệu thương hiệu, thông tin về ứng dụng (logo công ty, logo ứng dụng,...) Màn hình này thường delay một khoảng thời gian nhở trước khi thực sự bắt đầu ứng dụng, và tôi khá chắc chắn rằng bạn đã nhìn thấy ít nhất 1 trong những màn hình kiểu kiểu dưới đây:
Tôi xin nhắc lại 1 lần nữa, theo quan điểm của tôi, thì những màn hình ở trên là copy từ những ứng dụng iOS. Ban đầu có thể một số bạn nghĩ rằng tôi là 1 anti-fan của iOS vì iOS gây ảnh hưởng tiêu cực đến hệ điều hành Android. Tôi thường thấy rất nhiều sai lầm của các ứng dụng Android là port (ăn cắp) từ các ứng dụng iOS. Tuy nhiên tôi không nghĩ iOS là một nền tảng di động tệ hại. Và tôi thực sự tin rằng nó còn là một hệ điều hành tuyệt vời nữa. Vấn đề chúng ta đang nói đến ở đây không phải ở hệ điều hành mà là cách mọi người hiểu và sử dụng nó mà thôi. Và những màn hình ứng dụng là 1 trong những ví dụ rõ ràng nhất minh chứng cho việc hiểu sai về hệ điều hành nói chung. Splash được sử dụng phổ biến với những ứng dụng iOS, và nó được Apple khuyến khích. Thật vậy nếu bạn xem các tài liệu liên quan đến iOS bạn sẽ nhận ra 1 điều rằng Apple khuyến khích các nhà phát triển sử dụng màn hình splash. Màn hình splash thực sự chỉ là đánh lừa con mắt và suy nghĩ của người dùng rằng ứng dụng mở nhanh hơn. Trên iOS, màn hình spash hiển thị ngay khi người dùng click vào và chờ cho đến khi ứng dụng đã sẵn sàng làm việc. Ngay sau khi nó sẵn sàng thì nó sẽ hiển thị màn hình làm việc chính, thay cho màn hình Splash. Kết quả là màn hình Splash là cách tốt nhất để nâng cao trải nghiệm người dùng. Hình ảnh sưới đây sẽ cho bạn thấy những màn hình splash được giới thiệu và sử dụng trong cách xây dựng những ứng dụng iOS trước đây:
Tại sao chúng ta không nên lạm dụng màn hình splash
Các tài liệu iOS quy định cụ thể rằng màn hình splash không nên sử dụng như một cơ hội để xây dựng thương hiệu. Và thật không may, quy định này dường dư bị lờ đi bởi những nhà phát triển. Thật sự không thể đổ lỗi cho họ được. Họ chỉ đơn giản là muốn thay đổi 1 chút trong quy định đó để sử dụng chúng như một màn hình splash đúng yêu cầu mà thôi. Và điều làm tôi thực sự thất vọng là việc này cũng diễn ra với hệ điều hành Android. Màn hình splash không phù hợp với nền tảng Android với nhiều lý do mà tôi muốn chia sẻ như với bạn:
-
Đây là màn hình ngăn cản việc tương tác với ứng dụng của người dùng. Theo những gì tôi được biết thì, điều này không được viết rõ trong hướng dẫn của Android nhưng Android được thiết kế để người dùng có thể sử dụng các tính năng của nó hơn là việc cung cấp các tính năng. Để làm được như vậy thì thì toàn bộ hệ thống nên tập trung vào những việc mà người dùng cần càng nhanh càng tốt. Điều này có nghĩa là người dùng nên được truy cập đến màn hình làm việc chính nhanh nhất có thể. Một số ví dụ tốt nhất cho điều này đó là thanh thông báo ( tôi đoán người dùng iOS sẽ luôn nhớ đến những quảng cáo phiền nhiễu trên các bản iOS 5 trở về trước, hoặc khi nhận được 1 tin nhắn...) các hình ảnh chuyển động animation... ngăn chặn người dùng tương tác với ứng dụng và buộc họ phải xem, click vào quảng cáo đó là điều mà không một người dùng Android nào mong muốn.
-
Một màn hình mà không có giá trị sử dụng không được chiếm dụng tài nguyên của ứng dụng. Cá nhân tôi nghĩ rằng màn hình splash là không cần thiết, nó chiếm khoảng 98% các ứng dụng. Và màn hình này chỉ hữu ích với những ứng dụng nặng như Google Earth, Sky Map hoặc các games nhưng điều này lại không áp dụng được cho những ứng dụng tiện ích như đọc RSS, các ứng dụng mạng xã hội (Twitter, Flicker... thời bấy giờ), đọc tin tức... Bạn không nên sử dụng mạng để thực hiện những công việc nặng khi khởi động ứng dụng. Luôn nhớ rằng, tốc độ chính là 1 điểm mạnh của hệ thống Android. Đội ngũ phát triển Android tại Google đã dành rất nhiều thời gian cho việc này - và tôi chắc chắn rằng họ đã bỏ ra nhiều công sức cũng như thời gian - đảm bảo các ứng dụng khởi động một cách nhanh chóng. Kết quả là một ứng dụng Android thường sẵn sàng hoạt động với mức thời gian ít hơn 400ms, nghĩa là chưa đến 1s để mở ứng dụng lên và sẵn sàng cho người dùng tương tác. Và cũng luôn nhớ rằng ứng dụng hiện thị màn hình splash cũng là chiếm tài nguyên hệ thống.
-
Hiển thị màn hình splash không phải là 1 phần của framework android. Tôi không biết chính xác ở trong tài liệu hướng dẫn nào của Android nhưng tôi dám đảm bảo với bạn rằng splash không được coi là một màn hình cần thiết của ứng dụng
-
Màn hình splash làm tăng kích thước ứng dụng (size của file apk). Với những màn hình lớn có độ phân giải khác nhau thì người ta cần chuẩn bị (bitmap, sắp xếp, ảnh nine-patch...) Điều này thật vô nghĩa và người dùng khó khăn hơn trong việc tải về ứng dụng (thời ấy internet cùi bắp lắm). Với những thiết bị có bộ nhớ hạn chế thì thật là tai hại. Và ví dụ cho điều này là một ứng dụng phổ biến đưọc cài trên iphone và iPad chúng có kích thước thự sự lớn, và splash cũng là 1 trong những nguyên nhân gây ra việc ấy ( hầu hết thì các ứng dụng iOs đều nặng hơn Android). Như tôi đã nói trước đó thì iOS đánh lừa cảm giác người dùng rằng họ đang dùng một ứng dụng đc khởi động thực sự nhanh. Nhưng nếu bạn nhìn vào resource của ứng dụng iOS thì sẽ thấy rằng iPhone yêu cầu 2 hình ảnh mặc định với kích thước 320x480 và 640x960 (chắc ý tác giả từ iOS3, 4, 5) trong khi iPad cần 4 hình ảnh (768x1004, 1536x2008, 1024x748 và 2048x1496) và được nén PNG, chúng ta có thể làm 1 ứng dụng demo chỉ có mỗi màn hình splash xem sao nhé, nó đã nặng tới 5MB rồi. Điều này là không chấp nhận được.
-
Hiển thị 1 màn hình splash trên Android đòi hỏi nhiều công sức hơn, vì android đang bị phân mảnh quá nhiều. Và còn nhiều lỗi khác khi ứng dụng bị lỗi, ứng dụng tự reset lại chẳng hạn nó đều phải qua màn hình này. Các nhà phát triển thay vì tập trung vào những thứ hữu ích hơn thì họ lại sử dụng chúng vào việc handle một công việc vô bổ.
-
Người dùng thực sự họ không quan tâm lắm đến thương hiệu của bạn ở màn hình khởi động. Khi họ mở ứng dụng là họ mong muốn nó vào luôn phần mà họ quan tâm. Một màn hình khởi động lâu đôi khi lại gây ức chế với người dùng và nó sẽ làm giảm thương hiệu của bạn. Nếu bạn thực sự cần xây dựng thương hiệu trong một ứng dụng (tôi thì khuyến khích các bạn làm điều này để có được những ứng dụng trực quan, dễ tìm kiếm hơn), tôi đề nghị bạn nên sử dụng Actionbar, sử dụng màn hình làm việc như là một cơ hội để gửi gắm thông điệp của bạn đến người dùng. Hãy tin tôi, ở vài trò một người dùng thông thường, khi tôi mở ứng dụng facebook, tôi muốn vào trang facebook của mình luôn chứ không muốn nhìn thấy biểu tượng facebook khổng lồ nằm chình ình ngay chính giữa màn hình một lúc lâu.
-
Màn hình splash cho thấy ứng dụng chỉ truy cập được vào 1 màn hình chính khi khởi động. Nhưng chỉ có một vài ứng dụng là có điều này, còn hầu hết các ứng dụng Android thì có nhiều màn hình để hiển thị ngay khi khởi động. Ví dụ đó là Google+, Contacts/Phone, và gần đây là Facebook. Điều này có thể được sử dụng dễ dàng bằng cách định nghĩa các <intent-filter /> (người dùng có thể mở ứng dụng từ web, từ notication, gọi từ 1 ứng dụng khác lên) và vào các màn hình khác nhau tùy ngữ cảnh. Và tính năng này thì chỉ có trên android, iOs thì chưa hỗ trợ (thời điểm bấy giờ thôi). Và nhiều người đã sai lầm rằng ứng dụng của mình chỉ có 1 cách truy cập duy nhất và do đó họ cho thêm màn hình splash vào.
-
Với những ứng dụng đa nhiệm thì hiện thị splash là vô nghĩa. Nhưng nếu màn hình này chỉ xuất hiện 1 lần duy nhất khi mở ứng dụng lần đầu thì có thể chấp nhận, tuy nhiên thì nó vẫn chiếm bộ nhớ. Android là một hệ điều hành đa nhiệm và nó không cần màn hình splash này.
Kết luận
Khi Apple tung ra iOS SDK lần đầu tiên nó đã định hướng người dùng về việc cần thiết của màn hình splash, và điều này vô hình chung bị bắt chước bởi các nền tảng khác, trong đó có Android. Và thật không may, công nghệ thay đổi từng ngày, các thiết bị iOS dần mạnh mẽ hơn, đa nhiệm hơn và màn hình splash trở thành sai lầm của chính họ. Và một lượng lớn người dùng cuồng iOS đã biến Android thành bản copy của iOS, bạn hãy tham gia cùng chúng tôi để chống lại điều này. Ứng dụng iOS chỉ thích hợp với hệ điều hành iOS và Android cũng vậy, hãy để chúng mang bản sắc riêng của mình.