Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在android中,当应用程序被刷卡杀死时,如何执行代码?_C#_Android_Xamarin_Xamarin.android - Fatal编程技术网

C# 在android中,当应用程序被刷卡杀死时,如何执行代码?

C# 在android中,当应用程序被刷卡杀死时,如何执行代码?,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,所以基本上我用xamarin上的C#创建了一个应用程序,一切都运行得很完美。我调用了一个事件处理程序,当我按下android上的“后退”按钮时,它不会退出应用程序,而是在后台移动它。为此,我使用了: public override void OnBackPressed() { MoveTaskToBack(true); } 现在我想,如果用户想通过从任务中刷卡来终止应用程序,我希望它在关闭前执行一段代码。我做了一些研究,发现我应该使用以下方法: public o

所以基本上我用xamarin上的C#创建了一个应用程序,一切都运行得很完美。我调用了一个事件处理程序,当我按下android上的“后退”按钮时,它不会退出应用程序,而是在后台移动它。为此,我使用了:

public override void OnBackPressed()
    {
        MoveTaskToBack(true);
    }
现在我想,如果用户想通过从任务中刷卡来终止应用程序,我希望它在关闭前执行一段代码。我做了一些研究,发现我应该使用以下方法:

public override  void OnTaskRemoved( )
    {
    //the code here
    }
问题是,当我编写上述代码时,我收到一个错误,上面写着“error CS0115'MainActivity.OnTaskRemoved(Intent)”:找不到合适的方法来重写”


如果我删除覆盖,则不会出现错误,但当应用程序被刷卡杀死时,我放入其中的代码不会执行。有人能帮忙吗?谢谢

将Android服务添加到您的项目中,并覆盖
OnTaskRemoved
方法:

[Service(Label = "TaskEndService")]
[IntentFilter(new String[] { "com.sushihangover.TaskEndService" })]
public class TaskEndService : Service
{
    IBinder binder;

    public override StartCommandResult OnStartCommand(Android.Content.Intent intent, StartCommandFlags flags, int startId)
    {
        return StartCommandResult.NotSticky;
    }

    public override IBinder OnBind(Intent intent)
    {
        binder = new TaskEndServiceBinder(this);
        return binder;
    }

    public override void OnTaskRemoved(Intent rootIntent)
    {
        Log.Info("SO", $"{GetType().Name} just got killed....");
        base.OnTaskRemoved(rootIntent);
    }
}

public class TaskEndServiceBinder : Binder
{
    readonly TaskEndService service;

    public TaskEndServiceBinder(TaskEndService service)
    {
        this.service = service;
    }

    public TaskEndService GetTaskEndService()
    {
        return service;
    }
}
当应用程序启动时启动服务,或者使用boot completed(引导完成)并使其保持粘性(如果需要),等等:

StartService(new Intent(this, typeof(TaskEndService)));
然后,当有人从最近的应用程序列表中删除你的应用程序时(滑动或窗口关闭轻触),会调用
OnTaskRemoved
。在本例中,只需记录事件:

05-04 19:31:27.635  3690  3690 I SO : TaskEndService just got killed....
05-04 19:31:27.636   543   909 I ActivityManager: Killing 3690:com.sushihangover.service_exit_foo/u0a83 (adj 1001): remove task

看看这里,您是否需要至少传递一个参数给根据链接中的文档将意图作为参数的方法<代码>备注:如果服务当前正在运行,并且用户已删除来自服务应用程序的任务,则调用此函数。如果您已设置ServiceInfo.FlagStopWithTask,则不会收到此回调;相反,服务将被停止。您需要一个服务,在那里您将覆盖OnTaskRemoved,当您滑动应用程序时,它将被杀死,不再执行代码,因此您需要运行一个服务来捕获它。@Gusman您能给我一些关于这方面的更多信息吗?