Hướng dẫn - Bài học lập trình Android | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Hướng dẫn Bài học lập trình Android

Ngoc Lan

Gà con
Thành phần bộ điều hợp đồng bộ hóa trong ứng dụng của bạn đóng gói mã cho các tác vụ truyền dữ liệu giữa thiết bị và máy chủ.

Dựa trên lịch trình và trình kích hoạt bạn cung cấp trong ứng dụng của mình, khung bộ điều hợp đồng bộ hóa chạy mã trong thành phần bộ điều hợp đồng bộ hóa. Để thêm thành phần bộ điều hợp đồng bộ hóa vào ứng dụng của bạn, Học lập trình Android bạn cần thêm các phần sau:Đồng bộ hóa lớp bộ điều hợp.

Một lớp bao bọc mã truyền dữ liệu của bạn trong một giao diện tương thích với khung bộ điều hợp đồng bộ hóa.


Học lập trình viên quốc tế chuyên nghiệp


Giới hạn Service .Một thành phần cho phép khung bộ điều hợp đồng bộ hóa chạy mã trong lớp bộ điều hợp đồng bộ hóa của bạn.

Đồng bộ hóa tập tin siêu dữ liệu XML. Một tệp chứa thông tin về bộ điều hợp đồng bộ hóa của bạn. Khung này đọc tệp này để tìm hiểu cách tải và lên lịch truyền dữ liệu của bạn.

Tuyên bố trong bảng kê khai ứng dụng. XML khai báo dịch vụ bị ràng buộc và trỏ đến để đồng bộ siêu dữ liệu dành riêng cho bộ điều hợp.

Bài học này cho bạn thấy làm thế nào để xác định các yếu tố này.

Tạo một lớp bộ điều hợp đồng bộ

Trong phần này của bài học, bạn tìm hiểu cách tạo lớp bộ điều hợp đồng bộ đóng gói mã truyền dữ liệu. Tạo lớp bao gồm mở rộng lớp cơ sở bộ điều hợp đồng bộ hóa, xác định các hàm tạo cho lớp và triển khai phương thức trong đó bạn xác định các tác vụ truyền dữ liệu.

Mở rộng lớp bộ điều hợp đồng bộ cơ sở

Để tạo thành phần bộ điều hợp đồng bộ, hãy bắt đầu bằng cách mở rộng Abstract ThreadedSync Adapter và viết các hàm tạo của nó.

Sử dụng các hàm tạo để chạy các tác vụ thiết lập mỗi khi thành phần bộ điều hợp đồng bộ của bạn được tạo từ đầu, giống như khi bạn sử dụng Activity.

onCreate() để thiết lập một hoạt động. Ví dụ: nếu ứng dụng của bạn sử dụng nhà cung cấp nội dung để lưu trữ dữ liệu, hãy sử dụng các hàm tạo để lấy một ContentResolver thể hiện.

Do một dạng thứ hai của hàm tạo được thêm vào trong phiên bản nền tảng Học lập trình Android 3.0 để hỗ trợ parallelSyncs đối số, bạn cần tạo hai dạng của hàm tạo để duy trì khả năng tương thích.

Ví dụ sau đây cho bạn thấy cách triển khai AbstractThreadedSyncAdapter và các hàm tạo của nó:

Thêm mã truyền dữ liệu

Thành phần bộ điều hợp đồng bộ không tự động thực hiện truyền dữ liệu. Thay vào đó, nó đóng gói mã truyền dữ liệu của bạn, để khung bộ điều hợp đồng bộ hóa có thể chạy truyền dữ liệu trong nền mà không cần sự tham gia của ứng dụng.

Khi khung đã sẵn sàng để đồng bộ hóa dữ liệu của ứng dụng của bạn, nó sẽ yêu cầu bạn thực hiện phương thứ conPerformSync() .

Để thuận tiện cho việc chuyển dữ liệu từ mã ứng dụng chính của bạn sang thành phần bộ điều hợp đồng bộ hóa, khung bộ điều hợp đồng bộ hóa gọi onPerformSync () với các đối số sau: Tài khoản Một Account đối tượng được liên kết với sự kiện đã kích hoạt bộ điều hợp đồng bộ hóa.

Nếu máy chủ của bạn không sử dụng tài khoản, bạn không cần sử dụng thông tin trong đối tượng này.Ngoài ra Một Bundle cờ chứa được gửi bởi sự kiện đã kích hoạt bộ điều hợp đồng bộ hóa.Thẩm quyền Thẩm quyền của một nhà cung cấp nội dung trong hệ thống. Ứng dụng của bạn phải có quyền truy cập vào nhà cung cấp này.

Thông thường, cơ quan có thẩm quyền tương ứng với một nhà cung cấp nội dung trong ứng dụng của riêng bạn.Khách hàng cung cấp nội dung A ContentProviderClient cho nhà cung cấp nội dung được chỉ ra bởi đối số thẩm quyền.

A ContentProviderClient là một giao diện công cộng nhẹ cho một nhà cung cấp nội dung. Nó có chức năng cơ bản giống như một ContentResolver .

Nếu bạn đang sử dụng nhà cung cấp nội dung để lưu trữ dữ liệu cho ứng dụng của mình, bạn có thể kết nối với nhà cung cấp với đối tượng này. Nếu không, bạn có thể bỏ qua nó.Kết quả đồng bộ hóa Một SyncResult đối tượng mà bạn sử dụng để gửi thông tin đến khung bộ điều hợp đồng bộ hóa.

Đoạn mã sau cho thấy cấu trúc tổng thể của onPerformSync():

* Chỉ định mã bạn muốn chạy trong bộ điều hợp đồng bộ hóa. Toàn bộ
bộ điều hợp đồng bộ * chạy trong một luồng nền, vì vậy bạn không phải thiết lập
* xử lý nền của riêng mình.
* / ghi đè thú vị onPerformSync ( tài khoản : Tài khoản , tính năng bổ sung : Gói , quyền hạn : Chuỗi , nhà cung cấp : ContentProviderClient , syncResult : SyncResult ) { / * * Đặt mã truyền dữ liệu tại đây. * / }

Mặc dù việc triển khai thực tế onPerformSync() là dành riêng cho các yêu cầu đồng bộ hóa dữ liệu của ứng dụng và các giao thức kết nối máy chủ của bạn, có một số tác vụ chung mà việc triển khai của bạn sẽ thực hiện:Kết nối với máy chủ Mặc dù bạn có thể cho rằng mạng khả dụng khi quá trình truyền dữ liệu của bạn bắt đầu, khung bộ điều hợp đồng bộ hóa không tự động kết nối với máy chủ.

Tải xuống và tải lên dữ liệu Bộ điều hợp đồng bộ không tự động hóa bất kỳ tác vụ truyền dữ liệu nào. Nếu bạn muốn tải xuống dữ liệu từ máy chủ và lưu trữ nó trong nhà cung cấp nội dung, bạn phải cung cấp mã yêu cầu dữ liệu, tải xuống và chèn nó vào nhà cung cấp.

Tương tự, nếu bạn muốn gửi dữ liệu đến máy chủ, bạn phải đọc dữ liệu từ tệp, cơ sở dữ liệu hoặc nhà cung cấp và gửi yêu cầu tải lên cần thiết. Bạn cũng phải xử lý các lỗi mạng xảy ra trong khi truyền dữ liệu của bạn đang chạy.Xử lý xung đột dữ liệu hoặc xác định mức độ hiện tại của dữ liệu Bộ điều hợp đồng bộ không tự động xử lý xung đột giữa dữ liệu trên máy chủ và dữ liệu trên thiết bị.

Ngoài ra, nó không tự động phát hiện nếu dữ liệu trên máy chủ mới hơn dữ liệu trên thiết bị hay ngược lại. Thay vào đó, bạn phải cung cấp các thuật toán của riêng bạn để xử lý tình huống này.Dọn dẹp.Luôn đóng các kết nối đến máy chủ và dọn sạch các tệp tạm thời và bộ đệm khi kết thúc quá trình truyền dữ liệu của bạn.

Ngoài các tác vụ liên quan đến đồng bộ hóa, bạn nên cố gắng kết hợp các tác vụ liên quan đến mạng thông thường của mình và thêm chúng vào onPerformSync(). Bằng cách tập trung tất cả các tác vụ mạng của bạn vào phương pháp này, bạn tiết kiệm được lượng pin cần thiết để bắt đầu và dừng các giao diện mạng.

Để tìm hiểu thêm về cách làm cho việc truy cập mạng hiệu quả hơn, hãy xem lớp đào tạo Truyền dữ liệu mà không làm cạn kiệt pin , mô tả một số tác vụ truy cập mạng mà bạn có thể đưa vào mã truyền dữ liệu của mình.

Liên kết bộ điều hợp đồng bộ với khung

Bây giờ bạn có mã chuyển dữ liệu được gói gọn trong một thành phần bộ điều hợp đồng bộ, nhưng bạn phải cung cấp cho khung công tác quyền truy cập vào mã của bạn.

Để làm điều này, bạn cần tạo một ràng buộc Service chuyển một đối tượng kết dính Học lập trình Android đặc biệt từ thành phần bộ điều hợp đồng bộ vào khung. Với đối tượng kết dính này, khung công tác có thể gọi onPerformSync() phương thức và truyền dữ liệu cho nó.

Khởi tạo thành phần bộ điều hợp đồng bộ hóa của bạn dưới dạng đơn lẻ trong onCreate()phương thức dịch vụ. Bằng cách khởi tạo thành phần trong onCreate(), bạn trì hoãn việc tạo thành phần đó cho đến khi dịch vụ khởi động, điều này xảy ra khi khung đầu tiên cố gắng chạy truyền dữ liệu của bạn.

Bạn cần khởi tạo thành phần theo cách an toàn luồng, trong trường hợp khung bộ điều hợp đồng bộ xếp hàng nhiều lần thực thi bộ điều hợp đồng bộ hóa của bạn để đáp ứng với trình kích hoạt hoặc lập lịch.

Ví dụ: đoạn mã sau chỉ cho bạn cách tạo một lớp thực hiện ràng buộc Service, khởi tạo thành phần bộ điều hợp đồng bộ hóa của bạn và lấy đối tượng liên kết Android:

Thêm tài khoản theo yêu cầu của khung

Khung bộ điều hợp đồng bộ yêu cầu mỗi bộ điều hợp đồng bộ hóa phải có loại tài khoản. Bạn đã khai báo giá trị loại tài khoản trong phần Thêm tệp siêu dữ liệu Authenticator .

Bây giờ bạn phải thiết lập loại tài khoản này trong hệ thống Học lập trình Android. Để thiết lập loại tài khoản, hãy thêm một tài khoản giả sử dụng loại tài khoản bằng cách gọi addAccountExplicitly().

Nơi tốt nhất để gọi phương thức là trong onCreate()phương thức hoạt động mở ứng dụng của bạn. Đoạn mã sau đây cho bạn thấy cách thực hiện điều này:

Thêm tệp siêu dữ liệu của bộ điều hợp đồng bộ hóa
Để cắm thành phần bộ điều hợp đồng bộ hóa của bạn vào khung, bạn cần cung cấp cho khung với siêu dữ liệu mô tả thành phần đó và cung cấp các cờ bổ sung.

Siêu dữ liệu chỉ định loại tài khoản bạn đã tạo cho bộ điều hợp đồng bộ hóa, tuyên bố quyền của nhà cung cấp nội dung được liên kết với ứng dụng của bạn, kiểm soát một phần giao diện người dùng hệ thống liên quan đến bộ điều hợp đồng bộ hóa và khai báo các cờ liên quan đến đồng bộ hóa khác.

Khai báo siêu dữ liệu này trong một tệp XML đặc biệt được lưu trữ trong /res/xml/thư mục trong dự án ứng dụng của bạn. Bạn có thể đặt bất kỳ tên nào cho tệp, mặc dù nó thường được gọi syncadapter.xml.

Tệp XML này chứa một thành phần XML duy nhất <sync-adapter>có các thuộc tính sau: Android: contentAuthority Cơ quan URI cho nhà cung cấp nội dung của bạn.

Nếu bạn đã tạo nhà cung cấp nội dung sơ khai cho ứng dụng của mình trong bài học trước Tạo Nhà cung cấp nội dung còn sơ khai , hãy sử dụng giá trị bạn đã chỉ định cho thuộc tính Android: authorities trong thành <provider>phần bạn đã thêm vào bảng kê khai ứng dụng của mình. Thuộc tính này được mô tả chi tiết hơn trong phần Khai báo Nhà cung cấp trong Bản kê khai .

Nếu bạn đang chuyển dữ liệu từ nhà cung cấp nội dung sang máy chủ bằng bộ điều hợp đồng bộ hóa của mình, giá trị này sẽ giống với quyền URI nội dung bạn đang sử dụng cho dữ liệu đó.

Giá trị này cũng là một trong những quyền mà bạn chỉ định trong Android: authorities thuộc tính của<provider> yếu tố khai báo nhà cung cấp của bạn trong bảng kê khai ứng dụng của bạn. Android: accountType Loại tài khoản được yêu cầu bởi khung bộ điều hợp đồng bộ.

Giá trị phải giống với giá trị loại tài khoản bạn đã cung cấp khi bạn tạo tệp siêu dữ liệu xác thực, như được mô tả trong phần Thêm tệp siêu dữ liệu Authenticator . Đó cũng là giá trị bạn đã chỉ định cho hằng số ACCOUNT_TYPE trong đoạn mã trong phần Thêm tài khoản theo yêu cầu của Khung .

Cài đặt thuộc tính Học lập trình Android: userVisible Đặt mức độ hiển thị của loại tài khoản của bộ điều hợp đồng bộ. Theo mặc định, biểu tượng tài khoản và nhãn được liên kết với loại tài khoản sẽ hiển thị trong phần Tài khoản của ứng dụng Cài đặt của hệ thống, do đó bạn nên ẩn bộ điều hợp đồng bộ hóa trừ khi bạn có loại tài khoản hoặc tên miền dễ liên kết với ứng dụng của bạn.

Nếu bạn biến loại tài khoản của mình thành vô hình, bạn vẫn có thể cho phép người dùng kiểm soát bộ điều hợp đồng bộ hóa với giao diện người dùng trong một trong các hoạt động của ứng dụng. Android: supportsUploading Cho phép bạn tải dữ liệu lên đám mây.

Đặt điều này thành false nếu ứng dụng của bạn chỉ tải xuống dữ liệu. Android: allowParallelSyncs Cho phép nhiều phiên bản của thành phần bộ điều hợp đồng bộ hóa của bạn chạy cùng một lúc.

Sử dụng điều này nếu ứng dụng của bạn hỗ trợ nhiều tài khoản người dùng và bạn muốn cho phép nhiều người dùng chuyển dữ liệu song song. Cờ này không có hiệu lực nếu bạn không bao giờ chạy nhiều lần truyền dữ liệu. Android: isAlwaysSyncable Cho biết khung bộ điều hợp đồng bộ hóa có thể chạy bộ điều hợp đồng bộ hóa của bạn bất cứ lúc nào bạn đã chỉ định.

Nếu bạn muốn điều khiển theo chương trình khi bộ điều hợp đồng bộ hóa của bạn có thể chạy, hãy đặt cờ này thành false, sau đó gọi requestSync() để chạy bộ điều hợp đồng bộ. Để tìm hiểu thêm về việc chạy bộ điều hợp đồng bộ hóa, hãy xem bài học Chạy Bộ điều hợp đồng bộ hóa

Ví dụ sau đây cho thấy XML cho bộ điều hợp đồng bộ sử dụng một tài khoản giả và chỉ tải xuống.

Khai báo bộ điều hợp đồng bộ hóa trong tệp kê khai

Khi bạn đã thêm thành phần bộ điều hợp đồng bộ hóa vào ứng dụng của mình, bạn phải yêu cầu các quyền liên quan đến việc sử dụng thành phần đó và bạn phải khai báo ràng buộc Service bạn đã thêm.

Vì thành phần bộ điều hợp đồng bộ chạy mã truyền dữ liệu giữa mạng và thiết bị, bạn cần yêu cầu quyền truy cập Internet.

Ngoài ra, ứng dụng của bạn cần yêu cầu quyền đọc và ghi cài đặt bộ điều hợp đồng bộ hóa, để bạn có thể điều khiển bộ điều hợp đồng bộ hóa theo chương trình từ các thành phần khác trong ứng dụng của bạn. Bạn cũng cần yêu cầu một quyền đặc biệt cho phép ứng dụng của bạn sử dụng thành phần xác thực mà bạn đã tạo trong bài học Tạo Trình xác thực gốc .

Để yêu cầu các quyền này, hãy thêm các điều sau vào bảng kê khai ứng dụng của bạn dưới dạng các phần tử con của<manifest>: Android. permission. INTERNET Cho phép mã bộ điều hợp đồng bộ truy cập Internet để có thể tải xuống hoặc tải dữ liệu từ thiết bị lên máy chủ.

Bạn không cần phải thêm quyền này một lần nữa nếu bạn đã yêu cầu nó trước đó. Học lập trình Android. permission.READ_SYNC_SETTINGSCho phép ứng dụng của bạn đọc cài đặt bộ điều hợp đồng bộ hiện tại.

Ví dụ, bạn cần sự cho phép này để gọi getIsSyncable(). Android. permission. WRITE_SYNC_SETTINGS Cho phép ứng dụng của bạn kiểm soát cài đặt bộ điều hợp đồng bộ. Bạn cần quyền này để đặt bộ điều hợp đồng bộ hóa định kỳ chạy bằng cách sử dụng addPeriodicSync().

Sự cho phép này là không cần thiết để gọi requestSync(). Để tìm hiểu thêm về việc chạy bộ điều hợp đồng bộ hóa, hãy xem Chạy Bộ điều hợp đồng bộ hóa .

Đoạn mã sau cho biết cách thêm quyền:

Cuối cùng, để khai báo ràng buộc Service mà khung sử dụng để tương tác với bộ điều hợp đồng bộ hóa của bạn, hãy thêm XML sau vào bảng kê khai ứng dụng của bạn dưới dạng một phần tử con của <application>:

Phần <intent-filter> tử thiết lập bộ lọc được kích hoạt bởi hành động có ý định Android. content. SyncAdapter, được hệ thống gửi để chạy bộ điều hợp đồng bộ. Khi bộ lọc được kích hoạt, hệ thống sẽ khởi động dịch vụ ràng buộc mà bạn đã tạo, trong ví dụ này là SyncService.

Thuộc tính Học lập trình Android: exported="true" cho phép các quy trình khác ngoài ứng dụng của bạn (bao gồm cả hệ thống) truy cập vào Service. Thuộc tính Android: process=":sync" cho hệ thống chạy Service trong một quy trình chia sẻ toàn cầu có tên sync.

Nếu bạn có nhiều bộ điều hợp đồng bộ hóa trong ứng dụng của mình, họ có thể chia sẻ quy trình này, điều này giúp giảm chi phí.

Phần <meta-data> tử cung cấp cung cấp tên của tệp XML siêu dữ liệu của bộ điều hợp đồng bộ mà bạn đã tạo trước đó. Các Android: name thuộc tính chỉ ra rằng siêu dữ liệu này là dành cho khuôn khổ sync Adapter. Phần Android: Resource tử chỉ định tên của tệp siêu dữ liệu.

Bây giờ bạn có tất cả các thành phần cho bộ điều hợp đồng bộ hóa của bạn. Bài học tiếp theo chỉ cho bạn cách nói với khung bộ điều hợp đồng bộ hóa để chạy bộ điều hợp đồng bộ hóa của bạn, để đáp ứng với một sự kiện hoặc theo lịch trình thông thường.
 


Top