即使应用程序在Android中被杀死,如何上传图像

时间:2017-09-25 11:01:36

标签: android intentservice background-service

我正在调用上传图片api,在后台运行的(function() { for( const data in node.dataset ) { // First remove the 'map' as this isn't required, then split any values with multiple capitals, // as these corrospond to multilevel object values. var key = (data.replace("map", "")).split(/(?=[A-Z])/), value = node.dataset[data]; // Pin Size const findOption = function(val) { return options[val.toLowerCase()]; }; // Check that there is a value if (value !== null) { var opt = null; // Find the corresponding default option for (var x = 0; key.length > x; x++) { opt = findOption(key[x]); } opt = value; } } console.log(options); }.call(_)); 中将图片上传到服务器。

调用IntentService,IntentService方法并在后台运行,据我所知,onHandleEvent将执行任务并调用IntentService方法。

在我的应用程序中,当我杀死我的应用程序时正在进行上传,上传已终止并且stopSelf()已停止完成上传任务。

即使应用程序被杀,我怎样才能使IntentService运行?

编辑1:我尝试使用Sticky服务,当我杀死应用程序时服务重新启动并且传递给IntentService方法的Intent数据为null

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码。首先,您需要在Manifest文件中添加Service的属性

<service
        android:name=".service.Service"
        android:enabled="true"
        android:icon="@drawable/ic_launcher"
        android:isolatedProcess="true">

  </service>

并在您的服务中添加START_STICKY

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

答案 1 :(得分:0)

您可以按照以下步骤中的说明创建服务,以使服务始终保持运行

1)在服务onStartCommand方法中返回START_STICKY。

public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}

2)使用startService(MyService)在后台启动服务,这样无论绑定客户端的数量如何,它始终保持活动状态。

Intent intent = new Intent(this, PowerMeterService.class);
startService(intent);

3)创建活页夹。

public class MyBinder extends Binder {
public MyService getService() {
        return MyService.this;
}
}

4)定义服务连接。

private ServiceConnection m_serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
        m_service = ((MyService.MyBinder)service).getService();
}

public void onServiceDisconnected(ComponentName className) {
        m_service = null;
}
};

5)使用bindService绑定到服务。

Intent intent = new Intent(this, MyService.class);
bindService(intent, m_serviceConnection, BIND_AUTO_CREATE);