I've got a widget which will update itself whenever there's a configuration change (such as screen orientation), and whenever the phone is unlocked. This process involves setting onClick
handlers for the buttons on my widget. This works well, however I have found that there's a usage case which causes my app to not respond to onClick
events. This particular case is whenever the launcher restarts itself.
Is there a way to detect when a launcher restarts, so I can update my widget manually? Or is there another way to ensure onClick
handlers are not lost?
Proposal by @Glitch might not work for certain cases, especially app widget with
ListView
. This is becauseListView
will get very slow (Try to scroll theListView
) afterappWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, list_id)
had been called several time.My guess is, the single
RemoteView
instance will keep all its executed instruction in a list. Over the time, the instruction list will grow. Every timeappWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, list_id)
, the large instruction list will be executed all over again.My proposed solution is as follow. However, I believe it will only work on certain device, as not all devices will receive same broadcast message during launcher restarting.
Turns out I was spamming
new RemoteViews()
when I should have just called it once to produce the view, and then referred to that one instance when required. In my solution, I have a class variable which stores this single RemoteView instance, and a getter to access it.