Câu hỏi:
Làm cách nào tôi có thể quản lý (Kết nối, Đọc, Ghi, Ngắt kết nối) kết nối bluetooth tồn tại thông qua thay đổi cấu hình?Làm cách nào để quản lý kết nối Bluetooth trên Android thông qua các thay đổi cấu hình?
Ưu tiên các giải pháp tương thích với phiên bản thiết bị 2.2 "Froyo" sử dụng ActionBarSherlock.
vấn đề ...
Cả
BluetoothDevice
cũng khôngBluetoothSocket
có thể được giữ lại trongonSaveState
.Để keep my app responsive, lệnh gọi chặn thứ hai là
BluetoothSocket.connect()
phải được thực hiện trên một chuỗi riêng biệt. Bắt đầu từRunnable
là cách được đề xuất để tạo chuỗi các tác vụ dài, nhưng đó là một cơn ác mộng đang cố khôi phục khi thay đổi cấu hình. Các tài liệu chính thức chỉ ra ba giải pháp khác nhau.Sử dụng
getLastNonConfigurationInstance()
, không được dùng nữa (nghiêm túc ?!).Đặt
android:configChanges="keyboardHidden|orientation"
như số BluetoothChat Sample. Tuy nhiên, điều này không tính đến tất cả các loại thay đổi cấu hình.Hủy & các tác vụ khởi động lại như số Shelves Example. Trong trường hợp này, điều này có thể lãng phí thêm 12 giây nữa.
Cập nhật 1
Nghiên cứu sâu hơn dẫn tôi đến asyncTaskLoader, nhưng nó có vẻ như điều này chỉ có thể cập nhật giao diện người dùng trên hoàn thành, và không thể cung cấp thông tin cập nhật.
Mẫu BluetoothHDP sử dụng dịch vụ. Các dịch vụ dường như tập trung vào giao tiếp giữa các quá trình và sự cần thiết phải tồn tại vượt quá vòng đời hoạt động. Tôi không cần một trong các tính năng này.
Cập nhật 2
As pointed out by Reuben, Fragment.setRetainInstance(bool)
đã thay thế phản getLastNonConfigurationInstance()
. Tại thời điểm này, có vẻ như tùy chọn tốt nhất là tạo một đoạn không giao diện người dùng liên tục bằng cách sử dụng setRetainInstance(true)
.
Có đáng để tạo một đoạn duy nhất cho hoạt động này chỉ vì vậy tôi có thể sử dụng 'setRetainInstance'? Đoạn "được giữ lại" có thể xoay và tự thay đổi kích thước của nó trên một thay đổi định hướng không? Ngoài ra, [câu hỏi SO này] (http://stackoverflow.com/questions/4585627) đã dạy tôi rằng một phân lớp của ứng dụng KHÔNG phải là cách an toàn để lưu trữ các hình ảnh toàn cầu. Trong thực tế, nó có thể dẫn đến lỗi gần như không thể tái tạo. – firyice
Re. Mảnh vỡ, vâng. Đó là giá trị nắm lấy cách mảnh vỡ của việc làm sớm hơn là sau này. Re phân lớp ứng dụng, một người nào đó bối rối. Có trạng thái nhiệm vụ có thể bị đóng băng bởi hệ điều hành trong khi quá trình bị giết, nhưng vậy thì sao? Application.onCreate() vẫn chạy khi quá trình/nhiệm vụ khởi động lại/tiếp tục. –
Vì vậy, những gì? Nếu quá trình khởi động lại và Application.onCreate() được gọi, bạn đã mất dữ liệu trong các biến toàn cầu đó. Cách duy nhất có thể ổn là hằng số. – firyice