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