バックグラウンド スレッドを実行する単純なアプリを作成しようとしています。目的は、携帯電話のバッテリーの状態など、いくつかのデータをペブル ウォッチに送信することです。
私はここを見ました: 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)
問題は、そのような問題をデバッグする手法は何ですか? コードに明らかに間違っているものはありますか?