私は、AsyncTaskの実行を自動化する方法を見つけようとしています。現在のところ、これはボタンプレスから機能しています。いくつかのコンテキストを与えることアクティビティのAsyncTaskをアプリケーションクラスから実行
-
アプリケーションクラス
// The Handler that gets information back from the BluetoothService
public final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_READ:
Log.d(TAG, "MESSAGE_READ");
byte[] readBuf = (byte[]) msg.obj;
readMessage = new String(readBuf);
break;
}
}
};
活動 - AsyncTaskサブクラス
private class PostTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
readBuf = ((MyApplication) getApplication()).getReadBuf();
speedcur1 = speedometer.getCurrentSpeed();
speedcur2 = speedometer1.getCurrentSpeed();
}
@Override
protected Void doInBackground(Void... params) {
if (readBuf.startsWith("V")) {
readBuf = readBuf.replace("V", "");
String[] parts = readBuf.split(",");
String part1 = parts[0];
String part2 = parts[1];
speed1 = Float.parseFloat(part1);
speed2 = Float.parseFloat(part2);
finalspeed1 = ((speed1 * 102)/100);
finalspeed2 = ((speed2 * 602)/100);
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
speedometer.onSpeedChanged(speedometer.getCurrentSpeed() - speedcur1);
speedometer.onSpeedChanged(speedometer.getCurrentSpeed() + finalspeed1);
speedometer1.onSpeedChanged(speedometer1.getCurrentSpeed() - speedcur2);
speedometer1.onSpeedChanged(speedometer1.getCurrentSpeed() + finalspeed2);
myLabel.setText(readBuf);
}
}
私は、このクラスの内部で、私のApplicationクラスを拡張してきたがハンドラであります私のサービスから送信されたメッセージを読み取る、このハンドラ内でが読み込まれ、適切なケースが選択されます。
私のmessage_readの場合、msg.obj
はbyte []として保存され、その後Stringとして保存されます。
私の現在のアイデアは、問題のアクティビティが現在実行中であるかどうかを確認した後、何らかの形でAsynTaskを自分のアクティビティ内でアプリケーションクラスハンドラから実行することです。もともと私はこの機能をループ内で動作させていましたが、私のアプリに大きな変更を加えた後、Bluetooth接続サービスが2つのアクティビティで共有されるため、要件が変更されました。
たちはあなたを助けることができるようにあなたのコードのビットを置く方が良いでしょう –
特にあなたがこのの簡単なコード例を与えることができる – sab215