首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除未使用的GcmTaskService服务?

如何删除未使用的GcmTaskService服务?
EN

Stack Overflow用户
提问于 2018-06-15 15:32:41
回答 1查看 83关注 0票数 1

我有这样的代码,GcmTaskService服务代码,检查互联网是可以推动一些数据在线:

代码语言:javascript
复制
public class NetworkChangeService extends GcmTaskService {

public static String TAG = "NetworkChangeService";
private static long ONE_HOUR_IN_SECONDS = 3600L;
private static long ONE_MINUTE_IN_SECONDS = 60L;

private Synchronizer synchronizer;

public NetworkChangeService() {

}

@Override
public int onRunTask(TaskParams taskParams) {

    // do my task here like syncing stuff
    Log.d(TAG, "NetworkChangeService says that Network is Connected...");

    saveData(getApplicationContext());

    // TODO : Reschedule task in after certain condition (if failure) not to create duplicates
    //scheduleTask(NetworkChangeService.this);

    return GcmNetworkManager.RESULT_SUCCESS;
}

/**
 * Schedule a Task that will be executed on Network Connected to Upload offline Members and Ventes
 * @param context Context of the Activity or Application
 */
public void scheduleTask(Context context) {

    OneoffTask task = new OneoffTask.Builder()
            .setService(NetworkChangeService.class)
            .setTag(TAG)
            .setExecutionWindow(1L, ONE_MINUTE_IN_SECONDS)
            .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
            .setPersisted(true)
            .setUpdateCurrent(true)
            .build();

    GcmNetworkManager.getInstance(context).schedule(task);
}

@Override
public void onInitializeTasks() {
    super.onInitializeTasks();
    // Re-schedule periodic task on app upgrade.
    scheduleTask(this);
}

public void saveData(Context context) {
    // OFFLINE MODE & ONLINE MODE
    // Check if there is connection to save data offline
    // Check if forceOffline is true then save Offline
    int connectionType = NetworkUtil.getConnectivityStatus(context);

    // 0 : No Connection, 1 : Mobile, 2 Wifi
    if(connectionType > 0) {

        if(synchronizer == null)
            synchronizer = new Synchronizer();

        // Save offline unsaved Members and Ventes
        synchronizer.saveMembersOnline();
        synchronizer.saveVentesOnline();
    }
}
}

现在我不再在应用程序中使用它了。当我删除该类时,服务仍然在后台运行,所以有时App会崩溃

代码语言:javascript
复制
java.lang.RuntimeException: Unable to instantiate service com.ezcoding.sxc.utils.NetworkChangeService

如何才能完全删除服务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 17:01:32

尝试取消与该服务相关的所有任务,看看会发生什么:

代码语言:javascript
复制
GcmNetworkManager.getInstance(this)
    .cancelAllTasks(NetworkChangeService.class)

另一方面,OneoffTask不支持在重新启动时持久化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50878703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档