我有一个andoid-app,当用户登录时连接到WebSocket服务器。 如果用户空闲一段时间或由于某种原因他的会话到期/终止,应用程序将通过WebSocket连接得到通知,我想让他回到登录活动(如果他是,则应用程序中没有任何功能)没有登录)。
我已经研究过广泛的Intents和runOnUIThread(),但似乎无法让它工作。 我的想法是简单地注册正在运行的活动(例如,所有这些都实现了一个接口)并进行调用,但这意味着所有活动都必须实现该接口。它们中的大多数已经从BaseActivity类继承但不是全部。
我意识到突然破坏用户流的不良做法,但除非用户有有效的会话,否则这些功能都不起作用。
我使用android-websocket(https://github.com/koush/android-websockets)库作为客户端,如果这有任何区别。
先谢谢托马斯
编辑:有时我也想以Toast或Dialog的形式通知用户服务器上发生了某个事件。
答案 0 :(得分:5)
我做了测试
查看ACRA项目 - 很好的异常处理。在第217行的ReportExecutor中(https://github.com/ACRA/acra/blob/master/acra/src/main/java/org/acra/builder/ReportExecutor.java#L217),活动在全新的线程中启动(没有runOnUiThread)。
我为什么工作太惊讶了。)
答案 1 :(得分:2)
要从后台启动活动,请尝试以下代码
Intent newIntent= new Intent(getBaseContext(), MainActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(newIntent);
答案 2 :(得分:2)
我认为这两种方法中的任何一种都应该有效:
使用Handler
:在Handler
中设置Activity
,覆盖其handleMessage
,这样当您向其发送消息时,只需携带{ {1}}到前面(或开始)。把它带到前面:
Activity
使用Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
:没有理由不这样做,只需声明您的接收器,注册它以进行某些操作(可能是自定义的)并以与上述相同的方式启动活动。一旦完成或关闭应用程序,请不要忘记取消注册。
如果您需要任何示例,请提出要求。