PendinNội dung được sử dụng rất nhiều cho các tiện ích. Do bố cục của một tiện ích đang chạy không "thuộc về" đối với mã của bạn, nhưng thay vào đó là dưới sự kiểm soát của hệ thống, bạn không thể gán trực tiếp các trình nghe nhấp chuột vào các phần tử giao diện. Thay vào đó bạn gán một PendingIntent đến những yếu tố (như nút) để khi người dùng chạm vào họ, PendingIntent là "thực thi", một cái gì đó như:
// get the widget layout
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.id.widget_layout);
// prepare to listen the clicks on the refresh button
Intent active = new Intent(context, WidgetCode.UpdateService.class);
PendingIntent refreshPendingIntent = PendingIntent.getService(context, 0, active, 0);
remoteViews.setOnClickPendingIntent(R.id.buttonWidgetRefresh, refreshPendingIntent);
// send the changes to the widget
AppWidgetManager.getInstance(context).updateAppWidget(appwidgetid, remoteViews);
Trong trường hợp này một nút trong widget bắt đầu một dịch vụ. Thông thường, bạn đặt thêm thông tin trong mục đích, với putExtras(), do đó, dịch vụ sẽ nhận được bất kỳ thông tin cần thiết nào để thực hiện công việc của mình.
Vì vậy, có bao giờ một thời gian khi bạn muốn bắt đầu một dịch vụ với 'PendingIntent'? –
Nếu bạn muốn bắt đầu một dịch vụ trong tương lai gần, đây sẽ là trường hợp lý tưởng. Giả sử tôi có thông báo hiển thị bản cập nhật mới có sẵn cho tài khoản của người dùng. Lý tưởng nhất là sẽ có một mục đích đang chờ xử lý sẽ thiết lập kết nối với máy chủ và tải xuống thông tin này. Tôi muốn nó được thực hiện khi người dùng đã khai thác thông báo NOT ngay lập tức, bằng cách này tôi chờ sự thuận tiện của người dùng, hoặc nếu người dùng không quan tâm họ có thể hủy bỏ thông báo và bản cập nhật mới tiếp theo sẽ phản ứng theo cùng một cách. – JoxTraex
Giải thích tuyệt vời, cảm ơn! – damluar