【java】 定时器+线程+自动唤醒APP函数+结束进程 +UDP收发 的工具函数封装

24 篇文章 0 订阅


定时器+线程+自动唤醒APP函数+结束进程 +UDP收发 封装成工具函数,方便直接调用

定时器

//定时器
Timer timer = null;
TimerTask task;
//设置定时器
if (timer == null) {
            timer = new Timer();
        }

        /**
         * 登录后就开启定时器
         */
        if (task == null) {
            task = new TimerTask() {
                @Override
                public void run() {
                //业务逻辑
                    System.out.println("run TimerTask");
                    }
                   
            };
        }
        if(timer != null && task != null )
            timer.schedule(task,0,1000);

//关闭定时器
if (timer != null) {
            timer.cancel();
            timer = null;
        }
        if (task != null) {
            task.cancel();
            task = null;
        }

线程

//线程
private Thread thread;
thread=new Thread(new Runnable() {
            @Override
            public void run() {
               //业务逻辑
            }
        });
        thread.start();

自动唤醒APP函数

/**
         * 跳转第三方APP唤醒
         */
        PackageManager packageManager = getPackageManager();
        if (PackageUtil.checkPackInfo(this,ConstantUtil.PACKAGE_NAME)) {
            Intent intent = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.CUPCAKE) {
                intent = packageManager.getLaunchIntentForPackage(ConstantUtil.PACKAGE_NAME);
                System.out.println("MainActivity  OnCreate() not start aodingPlayer");
                startActivity(intent);
            }
        } else {
            Toast.makeText(MainActivity.this, "没有安装" + ConstantUtil.PACKAGE_NAME, Toast.LENGTH_LONG).show();
        }
//涉及到的类
public class PackageUtil {
    public static Boolean checkPackInfo(Context paramContext, String paramString ) {
        PackageInfo info = null;
        try {
            info = paramContext.getPackageManager().getPackageInfo(paramString, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        if (info != null) {
            return true;
        }
        return false;
    }
}

public class ConstantUtil {
    /**
     * 拉起软件的包名
     */
    public static final String PACKAGE_NAME = "com.qht.a";
}

结束进程

//结束进程方法调用
SuUtil.kill(ConstantUtil.PACKAGE_NAME);
/**
 *
 * 执行android命令
 */
public class SuUtil {

    private static Process process;

    /**
     * 结束进程,执行操作调用即可
     */
    public static void kill(String packageName) {
        initProcess();
        killProcess(packageName);
        close();
    }

    /**
     * 初始化进程
     */
    private static void initProcess() {
        if (process == null)
            try {
                process = Runtime.getRuntime().exec("su");
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

    /**
     * 结束进程
     */
    private static void killProcess(String packageName) {
        OutputStream out = process.getOutputStream();
        String cmd = "am force-stop " + packageName + " \n";
        try {
            out.write(cmd.getBytes());
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭输出流
     */
    private static void close() {
        if (process != null)
            try {
                process.getOutputStream().close();
                process = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}

UDP收发

private DatagramSocket socket = null;
private int receivePort=1667;//本身端口
private int sendPort =0;//唤醒对方的端口
InetAddress serverSendAddress = null;//唤醒对方的ip

//udp接收
try {
                    System.out.println("监听端口1667");
                    socket = new DatagramSocket(receivePort);
                    socket.setSoTimeout(5000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
while (true) {
                    byte data[] = new byte[1024];
                    // 创建一个接收数据的DatagramPacket对象
                    DatagramPacket packet = new DatagramPacket(data, data.length);
                    try {
                        // 接收数据报
                        socket.receive(packet);
                        serverSendAddress=packet.getAddress();
                        sendPort=packet.getPort();
                        System.out.println("serverSendAddress:"+serverSendAddress.toString()+"port:"+sendPort);
                    } catch (SocketTimeoutException e) {
                        System.out.println("socket 10s 超时:" + e.getMessage());
                    } catch (SocketException e) {
                        System.out.println("socket SocketException:" + e.getMessage());
                        e.printStackTrace();
                    } catch (IOException e) {
                        System.out.println("socket IOException:" + e.getMessage());
                        e.printStackTrace();
                    }
                    String result = new String(packet.getData(), packet.getOffset(), packet.getLength()); //接受到的结果
                    } 
//udp发送
String sendData ="restartSuccess";
                        byte data1[] = sendData.getBytes();
                        // 创建一个发送数据的DatagramPacket对象
                        DatagramPacket packetSend = new DatagramPacket(data1, data1.length, serverSendAddress, sendPort);
                        try {
                            socket.send(packetSend);
                            System.out.println("socket.send:" + sendData);
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

额外补充

工具函数的记录就先到这!接下来,是一些整理的c++要点概要!

静态的使用注意事项

  1. 静态方法只能访问静态成员(包括成员变量和成员方法),非静态方法可以访问静态也可以访问非静态

  2. 静态方法中不可以定义 this, super 关键字。

  • 因为 一个类中, 一个 static 变量只会有一个内存空间, 虽然有多个类实例, 但这些类实例中的这个 static 变量会共享同一个内存空间。 静态方法在优先于对象存在, 所以静态方法中不可以出现 this, super 关键字。
  1. 主函数是静态的
  • 程序运行的时候, 静态成员已经加载在内存里面了, 包含静态成员的对象共享这些静态成员, 比方说, A 有一个静态成员 public static int i;那么程序运行的时候, 这个 i 就加载进内存了, A 的所有对象的 i 变量都指向这个静态空间的 i, 也就是说创建对象之前, 它就占空间了。

虚函数注意事项

  1. 静态成员函数不能是虚函数;
  2. 内联函数不能为虚函数;
  3. 构造函数不能是虚函数;
  4. 析构函数可以是虚函数, 而且通常声明为虚函数;
  5. 虚函数只能是类中成员函数且不能是静态(因为 static 成员函数没有 this 不能表现多态)。

x- - 使用

在这里插入图片描述

构造函数注意事项

  1. 只有接受一个参数的构造函数才能作为转换函数实现数据类型转换;
  2. 带非默认参数的构造函数可以把基本类型数据转换成类类型对象;
  3. 类型转换函数可以把类类型对象转换为其他指定类型对象;
  4. 类型转换函数只能定义为一个类的成员函数, 因为转换的主体是本类的对象, 所以不能定义为类的友元函数或者普通函数。

友元类的注意事项

  1. 友元关系不能被继承。
  2. 友元关系是单向的, 不具有交换性。 若类 B 是类 A 的友元, 类 A 不一定是类 B 的友元,要看在类中是否有相应的声明。
  3. 友元关系不具有传递性。 若类 B 是类 A 的友元, 类 C 是 B 的友元, 类 C 不一定是类 A 的友元, 同样要看类中是否有相应的申明。
  4. 友元函数可以直接被访问, 同一般函数的使用方式, 不需要通过对象名或类名来调用。
  5. 友元函数没有破环继承性机制。
  6. 友元函数没有 this 指针。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻傻虎虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值