Okay am i now using a IntentService without a thread
But now i get an ANR on a broadcast:
07-14 13:38:49.503: WARN/ActivityManager(59): Timeout of broadcast
BroadcastRecord{43f724c0 android.appwidget.action.APPWIDGET_ENABLED} -
receiver=android.os.binderpr...@43deed00
07-14 13:38:49.513: WARN/ActivityManager(59): Receiver during timeout:
ResolveInfo{43f72438 com.hyves.android.widget.HyvesWidgetProvider p=0
o=0 m=0x0}
07-14 13:38:49.523: INFO/Process(59): Sending signal. PID: 309 SIG: 3
07-14 13:38:49.523: INFO/dalvikvm(309): threadid=3: reacting to signal
3
07-14 13:38:49.732: INFO/dalvikvm(309): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:49.732: INFO/Process(59): Sending signal. PID: 59 SIG: 3
07-14 13:38:49.732: INFO/dalvikvm(59): threadid=3: reacting to signal
3
07-14 13:38:49.953: INFO/dalvikvm(59): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:49.953: INFO/Process(59): Sending signal. PID: 105 SIG: 3
07-14 13:38:49.953: INFO/dalvikvm(105): threadid=3: reacting to signal
3
07-14 13:38:50.013: INFO/dalvikvm(105): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:50.023: INFO/Process(59): Sending signal. PID: 116 SIG: 3
07-14 13:38:50.023: INFO/dalvikvm(116): threadid=3: reacting to signal
3
07-14 13:38:50.033: INFO/dalvikvm(116): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:50.043: INFO/Process(59): Sending signal. PID: 121 SIG: 3
07-14 13:38:50.043: INFO/dalvikvm(121): threadid=3: reacting to signal
3
07-14 13:38:50.073: INFO/dalvikvm(121): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:50.083: INFO/Process(59): Sending signal. PID: 295 SIG: 3
07-14 13:38:50.083: INFO/dalvikvm(295): threadid=3: reacting to signal
3
07-14 13:38:50.303: INFO/Process(59): Sending signal. PID: 219 SIG: 3
07-14 13:38:50.323: INFO/dalvikvm(219): threadid=3: reacting to signal
3
07-14 13:38:50.503: INFO/Process(59): Sending signal. PID: 171 SIG: 3
07-14 13:38:50.703: INFO/Process(59): Sending signal. PID: 238 SIG: 3
07-14 13:38:50.733: INFO/dalvikvm(238): threadid=3: reacting to signal
3
07-14 13:38:50.903: INFO/Process(59): Sending signal. PID: 260 SIG: 3
07-14 13:38:51.113: INFO/Process(59): Sending signal. PID: 272 SIG: 3
07-14 13:38:51.213: INFO/dalvikvm(272): threadid=3: reacting to signal
3
07-14 13:38:51.313: INFO/Process(59): Sending signal. PID: 203 SIG: 3
07-14 13:38:51.522: INFO/Process(59): Sending signal. PID: 194 SIG: 3
07-14 13:38:51.633: INFO/dalvikvm(194): threadid=3: reacting to signal
3
07-14 13:38:51.723: INFO/Process(59): Sending signal. PID: 248 SIG: 3
07-14 13:38:51.883: INFO/dalvikvm(248): threadid=3: reacting to signal
3
07-14 13:38:51.913: INFO/dalvikvm(171): threadid=3: reacting to signal
3
07-14 13:38:51.923: INFO/Process(59): Sending signal. PID: 110 SIG: 3
07-14 13:38:51.923: INFO/dalvikvm(110): threadid=3: reacting to signal
3
07-14 13:38:51.983: INFO/dalvikvm(110): Wrote stack traces to '/data/
anr/traces.txt'
07-14 13:38:51.993: INFO/Process(59): Sending signal. PID: 210 SIG: 3
07-14 13:38:52.053: DEBUG/dalvikvm(309): GC_FOR_MALLOC freed 4504
objects / 509560 bytes in 177ms
07-14 13:38:52.092: INFO/dalvikvm(210): threadid=3: reacting to signal
3
07-14 13:38:52.302: ERROR/ActivityManager(59): ANR in
com.hyves.android.application
07-14 13:38:52.302: ERROR/ActivityManager(59): Reason: Broadcast of
Intent { act=android.appwidget.action.APPWIDGET_ENABLED
cmp=com.hyves.android.application/
com.hyves.android.widget.HyvesWidgetProvider }
07-14 13:38:52.302: ERROR/ActivityManager(59): Load: 3.16 / 1.11 /
0.39
07-14 13:38:52.302: ERROR/ActivityManager(59): CPU usage from 17434ms
to 101ms ago:
07-14 13:38:52.302: ERROR/ActivityManager(59): zygote: 77% = 75%
user + 2% kernel / faults: 2350 minor 56 major
07-14 13:38:52.302: ERROR/ActivityManager(59): system_server: 11% =
9% user + 2% kernel / faults: 2144 minor 23 major
07-14 13:38:52.302: ERROR/ActivityManager(59): ndroid.settings: 5% =
1% user + 3% kernel / faults: 4591 minor 111 major
07-14 13:38:52.302: ERROR/ActivityManager(59): ndroid.launcher: 1% =
0% user + 1% kernel / faults: 1212 minor 11 major
07-14 13:38:52.302: ERROR/ActivityManager(59): adbd: 0% = 0% user +
0% kernel / faults: 30 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): m.android.phone: 0% =
0% user + 0% kernel / faults: 315 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): putmethod.latin: 0% =
0% user + 0% kernel / faults: 245 minor 1 major
07-14 13:38:52.302: ERROR/ActivityManager(59): logcat: 0% = 0% user
+ 0% kernel / faults: 57 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): com.svox.pico: 0% =
0% user + 0% kernel / faults: 192 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): e.process.gapps: 0% =
0% user + 0% kernel / faults: 54 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): roid.alarmclock: 0% =
0% user + 0% kernel / faults: 153 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): com.android.mms: 0% =
0% user + 0% kernel / faults: 148 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): d.process.media: 0% =
0% user + 0% kernel / faults: 126 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): s:FriendService: 0% =
0% user + 0% kernel / faults: 133 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): m.android.music: 0% =
0% user + 0% kernel / faults: 122 minor
07-14 13:38:52.302: ERROR/ActivityManager(59): -zygote: 0% = 0% user
+ 0% kernel
Here is my code in the AppWidgetProvider class:
@Override
public void onUpdate(Context context, AppWidgetManager manager,
int[] appWidgetIds) {
log("onUpdate");
// If no specific widgets requested, collect list of all
if (appWidgetIds == null) {
appWidgetIds = manager.getAppWidgetIds(
new ComponentName(context,
HyvesWidgetProvider.class));
}
// Request update for these widgets and launch updater service
HyvesWidgetService.requestUpdate(appWidgetIds);
context.startService(new Intent(context,
HyvesWidgetService.class));
}
And code from the IntentService
/**
* Start this service, creating a background processing thread, if
not
* already running. If started with {...@link #ACTION_UPDATE_ALL},
will
* automatically add all widgets to the requested update queue.
*/
@Override
protected void onHandleIntent(Intent intent) {
// If requested, trigger update of all widgets
if (ACTION_UPDATE_ALL.equals(intent.getAction())) {
AppWidgetManager manager =
AppWidgetManager.getInstance(this);
Log.d(TAG, "Requested UPDATE_ALL action");
requestUpdate(manager.getAppWidgetIds(new
ComponentName(this, HyvesWidgetProvider.class)));
}
onUpdate();
}
onUpdate calls an asynchronous api call, and a callback updates tthe
widget.
On Jul 14, 12:58 pm, Mark Murphy <[email protected]> wrote:
> On Wed, Jul 14, 2010 at 4:37 AM, TjerkW <[email protected]> wrote:
> > Basically i have an AppWidgetProvider which starts a Service on
> > update. That service starts a thread and at the end it updates the
> > widget by calling AppWidgetManager.updateAppWidget.
>
> Turn the Service into an IntentService, and get rid of your own
> thread. IntentService gives you your work on a background thread
> automatically. See:
>
> http://github.com/commonsguy/cw-advandroid/tree/master/AppWidget/Micr...
>
> > But i get a NullPointerException? What am i doing wrong? The Service
> > is not in a different process..
>
> That is impossible to say without seeing your code.
>
> --
> Mark Murphy (a Commons
> Guy)http://commonsware.com|http://github.com/commonsguyhttp://commonsware.com/blog|http://twitter.com/commonsguy
>
> _The Busy Coder's Guide to *Advanced* Android Development_ Version 1.9
> Available!
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en