服务重新发送意图奇怪的行为?

时间:2016-05-06 10:11:30

标签: android android-service

我正在使用img_width <- 0; // image width img_height <- y_max - y_min + 1 // image height // determining image width for each point greyscale_xy_point in greyscale_vector point_x_cell <- (pt.x - x_min) * x_epsilon * 10 if point_x_cell > img_width img_width <- point_x_cell + 1 loop // defining and initializing image with the calculated height and width greyscale_img(img_width, img_height) // initializing greyscale image points for y <- 0 to greyscale_img.height for x <- 0 to greyscale_img.width greyscale_img[y][x] = 0 loop loop // filling image with vector data for each point point_xy_greyscale in greyscale_vector image_x = (point_xy_greyscale.x - x_min) * x_epsilon * 10 image_y = point_xy_greyscale.y - y_min greyscale_image[image_y][image_x] = point_xy_greyscale.greyscale loop return greyscale_image 服务并使用该服务我想将视频和视频附带的元数据上传到服务器。

据我所知,我需要使用START_REDELIVER_INTENT而不是START_REDELIVER_INTENT,因为第一个会尝试再次从意图中获取数据,我需要这些数据。

我注意到的是,它会将带有元数据的视频正确上传到我的服务器,但会在接下来的1-2天内随机重新上传。

我没有经常测试过这种行为,但它已经发生了4-5次。难道我做错了什么 ?我是否应该在START_STICKY添加一些内容,以便在成功上传我的数据时将其标记为正确,以便它不会重新发送?

我的代码:

Service

1 个答案:

答案 0 :(得分:1)

成功上传视频后,您需要使用stopSelf(startId)停止服务。

否则该服务将在被系统停止后重新启动,接收初始意图并再次上传视频。

仔细阅读START_REDEVLIVER_INTENT的说明:

  

如果此服务的进程在启动时被终止(在返回之后)   onStartCommand(Intent,int,int)),然后它将被安排为a   重新启动,最后一次交付的Intent 重新发送再次通过   onStartCommand(Intent,int,int)。此意图将保持计划   用于重新传递,直到服务使用起始ID调用 stopSelf(int)   提供给onStartCommand(Intent,int,int)。该服务不会   接收带有null Intent的onStartCommand(Intent,int,int)调用   因为它只会在没有完成时重新启动   处理发送给它的所有Intent(以及任何此类待处理事件   在重新启动时交付。)