android 意图服务循环
android intent service in loop
我想使用 intent 服务 将数据发送到 服务器。我所做的是启动意图服务,在 class 中,我从本地数据库获取数据,并在 for 循环中将数据发送到服务器。有用。但我的问题是,我是否应该使用 for 循环来启动意图服务,例如
public void onReceive(Context context, Intent intent) {
for (int i=0;i<5;i++){
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
}
我正在使用警报管理器来触发该服务。什么是正确的方法?请帮忙。谢谢! .这是我的代码` public class ScheduleAlarmReciever extends WakefulBroadcastReceiver{
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
final int REQUEST_CODE=10;
SessionManager manager;
@Override
public void onReceive(Context context, Intent intent) {
manager=new SessionManager(context);
Log.e("ScheduleAlarmReceiver","New intent");
Log.e("ScheduleAlarmReceiver","Service is set");
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
public void setAlarm(Context context){
Intent intent=new Intent(context,ScheduleAlarmReciever.class);
pendingIntent=PendingIntent.getBroadcast(context,REQUEST_CODE,intent, PendingIntent.FLAG_UPDATE_CURRENT);
long firstMillis=System.currentTimeMillis();
long INTERVAL_IN_MILLIS=2*60*1000; //two minutes interval
alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,firstMillis,INTERVAL_IN_MILLIS,pendingIntent);
}
}
this is how i am setting the alarm
alarmReciever.setAlarm(MainActivity.this);and this is my intent service class
public class SampleService extends IntentService{
/**
* 创建一个意图服务。由您的 subclass 的构造函数调用。
*
* @param name 用于命名工作线程,仅对调试很重要。
*/
AsyncHttpClient asyncHttpClient;
dbUtil dbUtil;
通知管理器通知管理器;
NotificationCompat.Builder mBuilder;
int id=1;
public static final String API="http://customer-data.com/api/insertblevital";
public SampleService() {
super("sampleservice");
}
@Override
public void onCreate() {
super.onCreate();
asyncHttpClient=new SyncHttpClient();
dbUtil=DbUtil.getInstance(getApplicationContext());
notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
@Override
protected void onHandleIntent(Intent intent) {
if(0!=dbUtil.getAllData().size()) {
mBuilder= new NotificationCompat.Builder(getApplicationContext());
mBuilder.setContentText("Uploading data")
.setContentTitle("Sample Upload")
.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setProgress(0, 0, true);
notificationManager.notify(id,mBuilder.build());
for(int i=0;i<dbUtil.getAllData().size();i++){
Log.e("Sample email",dbUtil.getAllData().get(i).getEmail());
}
ArrayList<Sample> sampleArrayList = dbUtil.getAllData();
for (Sample sample : sampleArrayList) {
postData(sample);
}
mBuilder.setContentText("upload Complete");
mBuilder.setProgress(0, 0, false);
notificationManager.notify(id,mBuilder.build());
}
}
public void postData(Sample sample){
RequestParams requestParams=new RequestParams();
requestParams.add("email",sample.getEmail());
requestParams.add("Name",sample.getName());
requestParams.add("Height",sample.getHeight());
requestParams.add("Gender",sample.getGender());
asyncHttpClient.post(API,requestParams,new PostResponseHandler(sample.getEmail()));
}
public class PostResponseHandler extends TextHttpResponseHandler{
String email;
public PostResponseHandler(String email){
this.email=email;
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.e("failure","failure");
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Log.e("responseString",responseString);
ArrayList<String> stringArrayList=new ArrayList<>();
stringArrayList.add(email);
dbUtil.UpdateFlag(stringArrayList);
}
}
}
`
触发服务的警报管理器是执行此操作的正确方法。为什么要使用 for 循环?
我想使用 intent 服务 将数据发送到 服务器。我所做的是启动意图服务,在 class 中,我从本地数据库获取数据,并在 for 循环中将数据发送到服务器。有用。但我的问题是,我是否应该使用 for 循环来启动意图服务,例如
public void onReceive(Context context, Intent intent) {
for (int i=0;i<5;i++){
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
}
我正在使用警报管理器来触发该服务。什么是正确的方法?请帮忙。谢谢! .这是我的代码` public class ScheduleAlarmReciever extends WakefulBroadcastReceiver{
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
final int REQUEST_CODE=10;
SessionManager manager;
@Override
public void onReceive(Context context, Intent intent) {
manager=new SessionManager(context);
Log.e("ScheduleAlarmReceiver","New intent");
Log.e("ScheduleAlarmReceiver","Service is set");
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
public void setAlarm(Context context){
Intent intent=new Intent(context,ScheduleAlarmReciever.class);
pendingIntent=PendingIntent.getBroadcast(context,REQUEST_CODE,intent, PendingIntent.FLAG_UPDATE_CURRENT);
long firstMillis=System.currentTimeMillis();
long INTERVAL_IN_MILLIS=2*60*1000; //two minutes interval
alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,firstMillis,INTERVAL_IN_MILLIS,pendingIntent);
}
}
this is how i am setting the alarm
alarmReciever.setAlarm(MainActivity.this);and this is my intent service class
public class SampleService extends IntentService{
/**
* 创建一个意图服务。由您的 subclass 的构造函数调用。
*
* @param name 用于命名工作线程,仅对调试很重要。
*/
AsyncHttpClient asyncHttpClient;
dbUtil dbUtil;
通知管理器通知管理器;
NotificationCompat.Builder mBuilder;
int id=1;
public static final String API="http://customer-data.com/api/insertblevital";
public SampleService() {
super("sampleservice");
}
@Override
public void onCreate() {
super.onCreate();
asyncHttpClient=new SyncHttpClient();
dbUtil=DbUtil.getInstance(getApplicationContext());
notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
@Override
protected void onHandleIntent(Intent intent) {
if(0!=dbUtil.getAllData().size()) {
mBuilder= new NotificationCompat.Builder(getApplicationContext());
mBuilder.setContentText("Uploading data")
.setContentTitle("Sample Upload")
.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setProgress(0, 0, true);
notificationManager.notify(id,mBuilder.build());
for(int i=0;i<dbUtil.getAllData().size();i++){
Log.e("Sample email",dbUtil.getAllData().get(i).getEmail());
}
ArrayList<Sample> sampleArrayList = dbUtil.getAllData();
for (Sample sample : sampleArrayList) {
postData(sample);
}
mBuilder.setContentText("upload Complete");
mBuilder.setProgress(0, 0, false);
notificationManager.notify(id,mBuilder.build());
}
}
public void postData(Sample sample){
RequestParams requestParams=new RequestParams();
requestParams.add("email",sample.getEmail());
requestParams.add("Name",sample.getName());
requestParams.add("Height",sample.getHeight());
requestParams.add("Gender",sample.getGender());
asyncHttpClient.post(API,requestParams,new PostResponseHandler(sample.getEmail()));
}
public class PostResponseHandler extends TextHttpResponseHandler{
String email;
public PostResponseHandler(String email){
this.email=email;
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.e("failure","failure");
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Log.e("responseString",responseString);
ArrayList<String> stringArrayList=new ArrayList<>();
stringArrayList.add(email);
dbUtil.UpdateFlag(stringArrayList);
}
}
} `
触发服务的警报管理器是执行此操作的正确方法。为什么要使用 for 循环?