1

バックグラウンド スレッドを実行する単純なアプリを作成しようとしています。目的は、携帯電話のバッテリーの状態など、いくつかのデータをペブル ウォッチに送信することです。

私はここを見ました: https://developer.android.com/training/run-background-service/create-service.html

いくつかのコードを書きました(ここでは「インポート」をスキップしました):

public class MyWatch extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void sendMessage(View view) {
            Intent serviceIntent = new Intent(this, MyWatchService.class);
            serviceIntent.setData(Uri.parse("http://google.com/"));
            startService(serviceIntent);
    }
}
class MyWatchService extends IntentService {
    public MyWatchService() {
        super("MyWatchService");
    }
    @Override
    protected void onHandleIntent(Intent workIntent) {
        String localUrlString = workIntent.getDataString();
    }
}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="ru.ozlabs.mywatchapp"
      android:versionCode="1"
      android:versionName="1.0"
      android:debuggable="true"
>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
    <activity android:name="MyWatch"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service
        android:name=".MyWatchService"
        android:process="another_thread"
        android:exported="false"/>

コンパイル済み (「ant -q debug」)、電話にインストール済み (adb install ...)、これは Moto G lollipop です。アプリを実行するとクラッシュします。startService() を削除しても問題はありません。何が起こっているのかjdbを介して調べてみましたが、これしか表示されません:

Exception occurred: java.lang.RuntimeException (uncaught)"thread=main", com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(), line=907 bci=33

「すべて見る」は、次のようなバックトレースを出力します (最後の 2 つは 10 回のように繰り返されます)。

main[1] where all
main:
  [1] com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:907)
  [2] com.android.internal.os.ZygoteInit.main (ZygoteInit.java:696)
Signal Catcher:
Current thread isn't suspended.
FinalizerDaemon:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:422)
  [3] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:101)
  [4] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:72)
  [5] java.lang.Daemons$FinalizerDaemon.run (Daemons.java:173)
  [6] java.lang.Thread.run (Thread.java:818)
ReferenceQueueDaemon:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Daemons$ReferenceQueueDaemon.run (Daemons.java:133)
  [3] java.lang.Thread.run (Thread.java:818)

問題は、そのような問題をデバッグする手法は何ですか? コードに明らかに間違っているものはありますか?

4

0 に答える 0