Actually this question applies to any widget that requires data from a remote server.
The answer would be pure speculation, but how do you think the widget gets its data? For those that don’t know, the widget shows a history of your friends’ latest status updates.
Some answers that I can think of:
- The widget polls the API directly
- The widget grabs data from some
service that’s running in the
background, which polls the server - Somehow Facebook implemented push on
Android which I don’t think exists - The widget somehow detects that the
user is using the screen and grabs
the data on demand
I would say #1 or #2. Most likely #2 for the reasons jleedev gives in his answer.
Note that to implement an app widget you extend AppWidgetProvider, which is a BroadcastReceiver. This is simply a class that runs in the background and pushes updates to the widget on screen via RemoteViews. So what you are seeing on your home screen isn’t an actual running Activity, it’s just a fairly static view that is updated periodically via a special BroadcastReceiver. I say all this to show that there isn’t much difference between your #1 and #2, as all homescreen app widget code you write runs in the background.
Also you can’t really do #4. You can’t detect when an app widget is on screen, unfortunately. The best you can do currently is schedule alarms to update your app widget, and use the flag that keeps those alarms from firing when the phone is asleep.