将 定时器+线程+自动唤醒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++要点概要!
静态的使用注意事项
-
静态方法只能访问静态成员(包括成员变量和成员方法),非静态方法可以访问静态也可以访问非静态。
-
静态方法中不可以定义 this, super 关键字。
- 因为 一个类中, 一个 static 变量只会有一个内存空间, 虽然有多个类实例, 但这些类实例中的这个 static 变量会共享同一个内存空间。 静态方法在优先于对象存在, 所以静态方法中不可以出现 this, super 关键字。
- 主函数是静态的。
- 程序运行的时候, 静态成员已经加载在内存里面了, 包含静态成员的对象共享这些静态成员, 比方说, A 有一个静态成员 public static int i;那么程序运行的时候, 这个 i 就加载进内存了, A 的所有对象的 i 变量都指向这个静态空间的 i, 也就是说创建对象之前, 它就占空间了。
虚函数注意事项
- 静态成员函数不能是虚函数;
- 内联函数不能为虚函数;
- 构造函数不能是虚函数;
- 析构函数可以是虚函数, 而且通常声明为虚函数;
- 虚函数只能是类中成员函数且不能是静态(因为 static 成员函数没有 this 不能表现多态)。
x- - 使用
构造函数注意事项
- 只有接受一个参数的构造函数才能作为转换函数实现数据类型转换;
- 带非默认参数的构造函数可以把基本类型数据转换成类类型对象;
- 类型转换函数可以把类类型对象转换为其他指定类型对象;
- 类型转换函数只能定义为一个类的成员函数, 因为转换的主体是本类的对象, 所以不能定义为类的友元函数或者普通函数。
友元类的注意事项
- 友元关系不能被继承。
- 友元关系是单向的, 不具有交换性。 若类 B 是类 A 的友元, 类 A 不一定是类 B 的友元,要看在类中是否有相应的声明。
- 友元关系不具有传递性。 若类 B 是类 A 的友元, 类 C 是 B 的友元, 类 C 不一定是类 A 的友元, 同样要看类中是否有相应的申明。
- 友元函数可以直接被访问, 同一般函数的使用方式, 不需要通过对象名或类名来调用。
- 友元函数没有破环继承性机制。
- 友元函数没有 this 指针。