Professional Documents
Culture Documents
LT Ch2 Android Skeleton Và Ho T Đ NG (TT) P3
LT Ch2 Android Skeleton Và Ho T Đ NG (TT) P3
Vũ Tuấn Anh
VÀ HOẠT ĐỘNG P3
MỤC LỤC
2.1 Giới thiệu các thành phần của ứng dụng (Activities, Service, Intent,
Content Providers) và các loại khác của các ứng dụng : standalone,
widget, background ...
2.2 Lifecycle của ứng dụng Android
2.3 Sử dụng các tài nguyên bên trong và bên ngoài
2.4 Tạo mới Activities, kết nối các Activity bằng cách dùng Intent
2.5 Giới thiệu Fragments
2.6 Làm việc với Notifications
2.7 Trạng thái chuyển tiếp hoạt động và lifecycle : stack, queue, kiểm
soát thay đổi state và lifetime
2.5 GIỚI THIỆU FRAGMENTS
onAttach(): hàm này thực hiện tạo tham chiếu từ một fragment đến activity đã khởi
tạo nó, và thực hiện một số bước trong quá trình khởi tạo
onCreate(): thực hiện khởi tạo fragment
onCreateView(): thực hiện tạo giao diện(view), trả về view là giao diện file xml
tương ứng fragment. ko nên tương tác với activity trong hàm này bởi vì activity chưa
được khởi tạo đầy đủ. Không cần thực hiện hàm này với các fragment không có
header
onActivityCreated(): thực hiện hoàn thành nốt việc khởi tạo activity và fragment.
Trong bước này chúng ta có thể gọi findViewById()
2.5 GIỚI THIỆU FRAGMENTS
onStart(): thực hiện việc hiển thị fragment lên màn hình
onResume(): fragment chính thức hoạt động hoàn toàn
onPause(): fragment bị tạm dừng hoạt động, nó vẫn có thể được nhìn thấy
onStop(): fragment bị ẩn
onDestroyView(): giao diện(view) của fragment bị hủy. Nếu nó được gọi quay lại,
nó sẽ quay trở lại thực hiện hàm onCreateView()
onDestroy(): bị hủy
onDetach(): bị hủy hoàn toàn
2.5 GIỚI THIỆU FRAGMENTS
Static Fragment Static Fragment là kiểu fragment được khai báo (định nghĩa) trực
tiếp trong file activity_main.xml Ví dụ ta có 2 static fragment
là Fragment1.java(fragment1.xml) và Fragment2.java(fragment2.xml) Trong
file activity_main.xml khai báo tĩnh:
2.5 GIỚI THIỆU FRAGMENTS
Chú ý: Bắt buộc phải có thuộc tính android:id. Nếu không sẽ gây lỗi. Hai
class Fragment1.java và Fragment2.java phải extends Fragment Và phải ghi đè
phương thức onCreateView():
2.5 GIỚI THIỆU FRAGMENTS
Chú ý: Các thư viện trong nhóm com.android.support cũng bao gồm support-
compat. Nên nếu bạn đã sử dụng thư viện hỗ trợ APIs khác, bạn có thể đã có quyền
truy cập tới NotificationCompat mà không cần thêm dependency như ở trên.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Notification:
Small icon: Nó là cần thiết và được gắn qua setSmallIcon().
App name: Nó được cung cấp bởi hệ thống.
Timestam: Nó được cung cấp bởi hệ thống, nhưng bạn có thể override với setWhen() hoặc
không hiển thị với setShowWhen(false).
Large icon: Nó không bắt buộc phải có (nó thường được sử dụng các hình ảnh liên lạc,
không sử dụng nó cho icon ứng dụng của bạn) và gán nó qua setLargeIcon().
Title: Nó là không bắt buộc và gán nó qua setContentTitle().
Text: Nó không bắt buộc bạn có thể gán nó qua setContentText(). Để gán quyền ưu tiên cho
một notification bạn gán qua setPriority(). Giá trị priority xác định mức độ được hiển thị
trong các tình huống khác nhau trong Android 7.1 hoặc thấp hơn. (Với Android 8.0 hoặc cao
hơn, bạn phải gán giá trị chanel importance - sẽ được trình bày ở phần dưới đây.)
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Chú ý rằng hàm khởi tạo của Notification.Builder yêu cầu bạn truyền vào một
chanel ID. Nó được yêu cầu để tương thích với Android 8.0(API level 26) hoặc cao
hơn, nhưng nó sẽ bị lờ đi ở các phiên bản cũ hơn (nếu bạn không truyền vào chanel
ID các thiết bị Android 8.0 hoặc hơn sẽ không hiển thị notification).
Mặc định, nội dung của notification bị cắt bỏ một phần để vừa vào một dòng. Nếu
bạn muốn notification của bạn nhiều nội dung hơn, bạn có thể sử dụng setStyle(). Ví
dụ:
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Bạn nên thực hiện đoạn code trên ngay khi ứng dụng của bạn bắt đầu và bạn có thể
thực hiện đoạn code trên lặp lại nhiều lần mà không gây lỗi gì.
Chú ý rằng hàm khởi tạo của NotificationChanel yêu cầu một giá trị importance,
giá trị importance này bạn có thể lấy một hằng số từ NotificationManager. Giá trị
này xác định notification được hiển thị không trong các trường hợp khác nhau, bạn
vẫn lên gán cả priority cho Android 7.1 hoặc thấp hơn. Mặc dù bạn phải gán giá trị
importance/prioty, nhưng hệ thống không đảm bảo việc hiện thị notification của bạn.
Trong một số trường hợp hệ thống có thể thay đổi giá trị importance dựa vào các yếu
tố khác, và người dùng luôn luôn có thể định nghĩa lại importance cho mối chanel.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Chú ý code phía trên gọi đến setAutoCancel(), nó sẽ tự động xóa notification khi
người dùng chạm vào nó.
Phương thức setFlags() sẽ giúp trải nghiệm của người dùng tốt hơn kho mở ứng
dụng của bạn qua notification. Nhưng việc đó tùy thuộc vào kiểu activity mà bạn
muốn chạy, có thể là một trong các điều sau:
Một activity tồn tại dành riêng cho các phản hồi từ notification. Người dùng không
hay điều hướng đến activity nay. Thông thường các activity này được khởi tạo trong
một task mới. Một activity tồn tại trong luồng ứng dụng thông thường trong app của
bạn, trong trường hợp này lên quay lại activity bằng back stack.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Nhớ rằng bạn lên lưu lại notification ID bởi vì bạn sẽ cần nó sau này cho việc chỉnh
sửa hoặc xóa notification.
Chú ý: Bắt đầu từ Android 8.1 (API level 27), ứng dụng của bạn không thể phát âm
thanh nhiều lần cho các notification trong một giây. Nếu ứng dụng của bạn tạo ra
nhiều notification trong một giây, thì tất cả các notification sẽ xuất hiện, nhưng chỉ
notification đầu tiền tại mỗi giây phát ra âm thanh.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Để thêm một button, truyền một PendingIntent vào phương thức addAction(). Thay vì mở
một activity, bạn có thể bắt đầu một BroadcastReceiver để thực hiện một việc dưới
background mà không làm gián đoạn ứng dụng đang chay của bạn. Ví dụ:
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Chú ý: Nếu bạn sử dụng lại PendingIntent, người dùng có thể phản hồi cuộc trò
chuyện với nội dung khác như người dùng nhập. Bạn phải cung cấp các request code
khác nhau cho mỗi cuộc trò chuyện hoặc cung cấp một intent không trả về true khi
người dùng gọi equal() trong intent phản hồi của bất cứ cuộc trò chuyện nào khác.
Conversation ID thường được thêm bundle của intent.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Sau khi bạn xử lí dữ liệu, bạn phải cập nhật lại notification bằng cách
gọi NotificationManagerCompat.notify() với cùng một ID hoặc tag(nếu sử dụng).
Việc này cần thiết để che đi giao diện phản hồi và xác nhận với người dùng là phản
hồi của họ đã được gửi đi.
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
2.6 LÀM VIỆC VỚI NOTIFICATIONS
Notification sẽ hiển thị cho đến khi một tròn các hành động sau sảy ra:
Người dùng loại bỏ thông báo.
Người dùng chọn vào notification, và bạn gọi vào setAutoCancel() khi bạn tạo
notification.
Bạn gọi cancel() cho một notification ID cụ thể. Phương thức này xóa notification
ngay cả khi nó đang diễn ra.
Bạn có thể gọi cancelAll(), nó sẽ xóa hết tất cả các notification bạn đa tạo ra trước
đó.
Nếu bạn gán một giá trị timeout khi tạo một notification sử dụng setTimeoutAfter(),
hệ thống sẽ hủy notification sau một thời gian cụ thể.
2.6 LÀM VIỆC VỚI NOTIFICATIONS