安卓心跳

原创 2015年11月18日 18:31:30
private boolean runHeartFlag = true;
    private boolean currentMain = true;

    private String first = "FIRST";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initFrame();
        UmengUpdateAgent.update(this);

        setHeartBeat();
    }

    private ExecutorService mExecutorService;
    private Handler mHeartHandler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message msg) {
            // 无权限,则弹出对话框,退出
            exitDialog();
            return true;
        }
    });

    /**
     * 设置心跳服务
     */
    private void setHeartBeat() {
        mExecutorService = Executors.newFixedThreadPool(4);
        imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
        mUserName = PreferencesUtils.getInstance(this).getString("userName");
        mUserService = new UserService();

        mExecutorService.execute(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (runHeartFlag) {
                    if (currentMain) {
                        if (HttpTool.isNetworkConnected(mActivity)) {
                            String result = mUserService.loginStatus(mUserName, imei, first);
                            first = "NOT_FIRST";
                            if (!TextUtils.isEmpty(result) && TextUtils.equals(result, "FAIL")) {
                                // 解析,判断状态,如果是无权限,则弹出对话框,退出
                                runHeartFlag = false;
                                mHeartHandler.sendEmptyMessage(0);
                            }
                        }
                        try {
                            Thread.sleep(10000);
                        } catch (Exception e) {
                            // TODO: handle exception
                            e.printStackTrace();
                        }
                    } 
                }
            }
        });
    }

    /**
     * 弹出对话框,告诉用户当前登录已失效
     * @param packetPath
     */
    private void exitDialog() {
        final AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.show();
        dialog.setContentView(R.layout.dialog_relogin);
        dialog.setCancelable(false);

        Button btn_got_it = (Button) dialog.findViewById(R.id.btn_got_it);
        btn_got_it.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                dialog.cancel();
                // TODO Auto-generated method stub
                mActivity.finish();
                Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
            }
        });
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        currentMain = true;
        if (mPacketFragment != null) {
            mPacketFragment.onActivityResume();
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        currentMain = false;
        if (mPacketFragment != null) {
            mPacketFragment.onActivityPause();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        runHeartFlag = false;
    }

使用mima框架实现安卓心跳包

  • 2017年12月03日 17:11
  • 622KB
  • 下载

心跳包机制(★firecat推荐★)

心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包  由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动...

检测心跳的安卓源码

  • 2015年04月16日 23:50
  • 762KB
  • 下载

java socket——心跳包

首先先说说心跳包在socket连接中的意义: 通过socket连接的双方为了保证在一段时间未发消息不被防火墙断开连接或者使对方及时知道自己是否已经断线而定期给对方发送的某些特殊标识字符,这个字符可以...

心跳技术3阶段协议

  • 2013年02月17日 11:26
  • 147KB
  • 下载

WCF双程操作(心跳)

  • 2012年04月14日 15:13
  • 168KB
  • 下载

Netty实现服务端客户端长连接通讯及心跳检测

通过netty实现服务端与客户端的长连接通讯,及心跳检测。        基本思路:netty服务端通过一个Map保存所有连接上来的客户端SocketChannel,客户端的Id作为Map的ke...

心跳机制详解

  • 2016年05月14日 14:58
  • 35KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓心跳
举报原因:
原因补充:

(最多只允许输入30个字)