【问题标题】:How can I send a message when my app is killed(android)我的应用程序被杀死时如何发送消息(android)
【发布时间】:2016-12-07 12:09:30
【问题描述】:

一般情况下,如果应用被杀,我什么都做不了。但我有一个要求是,当我的应用被杀时,我需要告诉服务器应用已经死。但是当我主动杀掉我的应用或我的应用时应用程序被系统回收,我什么都做不了,我不知道如何告诉服务器应用程序被杀死。我知道是调用jni,但我不知道如何编写jni代码。有人知道吗?

【问题讨论】:

  • 不确定这是否满足您的要求,但您可以实现与服务器的 Socket 连接(例如使用 socket.io)。一旦应用程序被终止,套接字连接将自动关闭,您的服务器将知道该应用程序已终止。
  • 对,默认的应用程序系统只会杀死进程而不通知应用程序它正在关闭(因此无法执行用户代码)。您可以做的是使用服务来监控应用程序的状态。
  • @eviident 如果应用程序被杀死,应用程序的服务会正常工作吗???
  • tbh,我不确定它是否也会,但对于服务,有一种方法可以让它们自动重启。因此,您应该能够跟踪应用程序状态

标签: android java-native-interface kill


【解决方案1】:

尝试使用守护进程。在这种情况下,您可以将您的 java 进程变成守护进程并完成主进程。

看这里:

https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo022

一般来说,你想妖魔化你的原生代码。

...
...
int demonize() {
  int pid = fork();
  switch ( pid ) {
    case -1:
      return (-1);
    case 0:
      break;
    default:
      return pid;
  }
  return 0;
}
...
...
int pid = demonize();

if( pid == 0 ) {
  while(1) {
    sleep(1);
    fprintf(fid, "daemon\n");
    fflush( fid );
  }
}

【讨论】:

  • 如何解决这个问题?当你的守护进程被杀死时会发生什么?
  • 问题是 - “在正常情况下,如果应用程序被杀死,我不能做任何事情(...)当我的应用程序被杀死时,我需要告诉服务器应用程序已经死了。”。上面的解决方案是该问题的答案。通过运行守护进程,您可以监控应用程序并让服务器知道它何时被杀死。
猜你喜欢
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多