关于android:延迟应用程序关闭并发送消息
Delay application close and make an send a message
实际上我有一个 TCP 客户端,它 onStart 连接到服务器并将设备 IP 和号码发送给它,但现在我希望当应用程序关闭时( onDestroy )延迟几秒钟(重新打开的正确时间连接并发送另一条消息)并发送另一条消息,其中我说设备处于离线状态。
我已经尝试过使用 onDestroy 方法,但它可能很疯狂,而且很明显
那没有用(我尝试在 onDestroy 上做以下事情:
protected void onDestroy() {
new ConnectTask().execute(""); if (client != null) { client.sendMessage(trm +"OFFLINE"); } if (client != null) { client.stopClient(); } super.onDestroy(); |
这是我调用 TCP 客户端并发送启动消息的 MainActivity 代码:
public class MainActivity extends AppCompatActivity {
Server server; static Client client; settings Settings; public static TextView terminale, indr, msg; TextView log; static TextView msgServer; static String ipp; static String trm; static DataBaseHandler myDB; allert Allert; SharedPreferences prefs; String s1 ="GAB Tamagnini SRL ?? 2017 \ " + "Via Beniamino Disraeli, 17,\ " + "42124 Reggio Emilia \ " + "Telefono: 0522 / 38 32 22 \ " + "Fax: 0522 / 38 32 72 \ " + "Partita IVA, Codice Fiscale \ " + "Reg. Impr. di RE 00168780351 \ " + "Cap. soc. a?? 50.000,00 i.v. \ " +"" + "REA n. RE-107440 \ " + "presso C.C.I.A.A. di Reggio Emilia"; ImageButton settings, helps, allerts, home;
@Override msg = (TextView) findViewById(R.id.msg); final Cursor cursor = myDB.fetchData(); startService(new Intent(MainActivity.this,FinalizingOperationsService.class)); WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); startConnection.postDelayed(runnableConnection,5000); cursor.close();
home.setOnClickListener(new View.OnClickListener() { settings.setOnClickListener(new View.OnClickListener() { helps.setOnClickListener(new View.OnClickListener() { allerts.setOnClickListener(new View.OnClickListener() { } @Override public static class ConnectTask extends AsyncTask<String, String, Client> { @Override
client = new Client(new Client.OnMessageReceived() { public void messageReceived(String message) { publishProgress(message); } return null; @Override msgServer.setTextColor(Color.parseColor("#00FF00")); Log.d("test","response" + values[0]); static Handler startConnection = new Handler(); new ConnectTask().execute(""); static Handler startMessage = new Handler(); static Handler startMessageClose = new Handler(); } |
打开连接的正确命令是
当我用
发送消息时
FinalizingOperationsService.java 代码:
public class FinalizingOperationsService extends Service {
@Override @Override @Override @Override MainActivity.startMessageClose.removeCallbacks(MainActivity.runnableMessageClose); stopSelf(); |
像这样创建一个新服务,
public class FinalizingOperationsService extends Service {
@Override @Override @Override @Override |
并像这样在清单文件中定义此服务,
<service android:name=". FinalizingOperationsService" android:stopWithTask="false"/>
|
最后在你的主要活动的 onCreate 方法中启动服务
解释:
当应用程序被杀死或销毁时,服务的 onTaskRemoved() 方法被调用,因此在此方法中您可以执行最终操作以通知服务器并在操作完成后停止您的服务。希望对你有帮助。
相关讨论
- 我只是尝试这样做,但似乎没有任何改变,我已经用 FinalizingOperationsService 代码更新了问题并更新了 MainActivity 你可以看看吗?
- 我认为当应用程序关闭时您会丢失客户端的引用,您应该必须在服务中重新初始化客户端才能执行这些操作。
- 等等,但我必须为 FinalizingOperationsService 创建一个新类吗?或者我可以在 MainActivity 中做到这一点?因为要重新初始化,我必须从 Main 重新复制所有异步方法
- 最好创建一个单独的类来初始化您的客户端。
- 实际上,我在 FinalizingOperationsService 中重新初始化了客户端,但应用程序仍然关闭而不发送消息,或者初始化只是立即关闭它的客户端......
- 仍然与旧的日志相同,我的意思是其中没有新内容,也没有来自 FinalizingOperationsService 的日志
- 让我们在聊天中继续这个讨论。