0

私のユーザーはゆっくりと ICS (Android 4.0 以降) に移行されており、それ以降、新しいクラッシュ レポートが表示されるのを確認できます...次のエラーをトリガーする WakefulIntentService の実装のようです:

com.cousinHub.meteo.AppService.doWakefulWork(AppService.java:104) での java.lang.NullPointerException com.cousinHub.meteo.WakefulIntentService.onHandleIntent(WakefulIntentService.java:70) での java.lang.NullPointerException IntentService.java:59) で android.os.Handler.dispatchMessage(Handler.java:99) で android.os.Looper.loop(Looper.java:123) で android.os.HandlerThread.run(HandlerThread.java:60) )

行 70 は、 onHandleIntent 内の問題を示しています。

import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;

abstract public class WakefulIntentService extends IntentService {
    abstract protected void doWakefulWork(Intent intent);

    public static final String LOCK_NAME_STATIC="com.commonsware.cwac.wakeful.WakefulIntentService";
    private static PowerManager.WakeLock lockStatic=null;

    public static void acquireStaticLock(Context context) {
        getLock(context).acquire();
    }

    synchronized private static PowerManager.WakeLock getLock(Context context) {
        if (lockStatic==null) {
            PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE);

            lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOCK_NAME_STATIC);
            lockStatic.setReferenceCounted(true);
        }

        return(lockStatic);
    }

    public static void sendWakefulWork(Context ctxt, Intent i) {
        acquireStaticLock(ctxt);
        ctxt.startService(i);
    }

    @SuppressWarnings("unchecked")
    public static void sendWakefulWork(Context ctxt, Class clsService) {
        sendWakefulWork(ctxt, new Intent(ctxt, clsService));
    }

    public WakefulIntentService(String name) {
        super(name);
    }

    @Override
    public void onStart(Intent intent, int startId) {
        if (!getLock(this).isHeld()) {  // fail-safe for crash restart
            getLock(this).acquire();
        }

        super.onStart(intent, startId);
    }

    @Override
    final protected void onHandleIntent(Intent intent) {
        try {
            doWakefulWork(intent);
        }
        finally {
            getLock(this).release();
        }
    }
}

このコードが Gingerbread (Android < 4.0) で正常に動作し、現在は壊れている理由は??

try {
            doWakefulWork(intent);
        }

=> 何らかの理由でインテントが null のように見える ??

または、NullPointer Exception をトリガーする次のコード ブロックである可能性があります。

finally {
            getLock(this).release();
        }
  • これをどのように解決しますか?

この道かな?

if ((this!=null)&&(intent!=null)) {
            try {
                doWakefulWork(intent);
            }
            finally {
                getLock(this).release();
            }
        }
4

1 に答える 1

2

あなたはあなたの例外が以下から生じることに気付くでしょう:

com.cousinHub.meteo.AppService.doWakefulWork(AppService.java:104)

com.cousinHub.meteoまず、パッケージには何も書きません。第二に、これはメソッドの実装にあり、doWakefulWork()私が公開したものは単なるサンプルです。第三に、あなたは自分の実装を公開することを拒否し、doWakefulWork()104行目であると指摘しました。

AppServiceクラスの104行目を調べて、どこが間違っているのかを判断することをお勧めします。

于 2012-09-21T10:47:16.883 に答える