わかりました、あなたの問題に対する私の理解に基づいて解決策を提供しようとします: あなたは写真付きのリストを持っていて、ユーザーがそれらの画像をアップロードし、そのステータスをユーザーに更新する資格があることを望んでいます (アップロード済み/アップロード中/アップロード/失敗)、Service
アップロードするたびに を開始したくない場合。
簡単な実用的な解決策は、IntnetService
タスクが割り当てられている場合にのみ実行され、作業が終了すると自動的にシャットダウンされ、もちろん、作業中はジョブが別のスレッドになります。IntentService
step 1
画像に関するデータを含むデータベース テーブルを作成する
_id integer
_image_uri
_image_status :
_image_status
これらの値のいずれかを保持します (1-uploaded: finish_uploaded、2-uploading: サービスが画像をアップロード中、3-upload: ユーザーが画像をアップロードできます、4-failed: アップロードに失敗しました、再試行できます)
step2
画像をサーバーにアップロードしようとしておりUploadIntentService
、アップロードが正常に完了した場合、またはアップロード中にエラーが発生した場合は、データベースを更新します
public class UploadIntentService extends IntentService {
private static final String TAG = UploadIntentService.class.getSimpleName();
private static final int STATUS_UPLOAD = 0x01; //can be uploaded
public static final int STATUS_FAILED_TO_UPLOAD = 0x02; // tried to upload but failed
public static final int STATUS_UPLOADING = 0x03; // self explanied
public static final int STATUS_SUCCESSFULLY_UPLOADED = 0x04; // the image uploaded to server
public UploadIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
int status = intent.getIntExtra("status", -1);
String imageUri = intent.getStringExtra("image_path");
long imageDatabaseid = intent.getLongExtra("image_db_address",-1);
if(status != STATUS_SUCCESSFULLY_UPLOADED && status != STATUS_UPLOADING){
try{
//update _image_status column with value of STATUS_UPLOADING with the image_id = imageDatabaseid;
//upload code
//successfully uploaded
//update _image_status column with value of STATUS_SUCCESSFULLY_UPLOADED with the image_id = imageDatabaseid;
}catch(Exception ex){
ex.printStackTrace();
//update _image_status column with value of STATUS_FAILED_TO_UPLOAD with the image_id = imageDatabaseid;
}
}
}
}
……
step3
画像をアップロードするListActivity
場合は、このコードを使用します
Intent intent = new Intent(context, UploadIntentService.class);
Bundle uploadExtras = new Bundle(3);
uploadExtras.putLong("image_db_address", PUT HERE THE IMAGE DATABASE ID );
uploadExtras.putInt("status", PUT HERE THE IMAGE STATUS );
uploadExtras.putString("image_path", PUT HERE THE IMAGE PATH IN FILE SYSTEM);
intent.putExtras(uploadExtras);
context.startService(intent);
....... 手順 4
manifest.xml でサービスを宣言していることを確認してください。