Application工具方法
//注册这个接口
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
@Override
public void onTerminate() {
//注销这个接口。
unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);
super.onTerminate();
}
public static List<Activity> activitys = new ArrayList<>();
public static Activity showActivitys;
private ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
activitys.add(activity);
}
@Override
public void onActivityDestroyed(Activity activity) {
activitys.remove(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
showActivitys = activity;
LgqLogPlus.e("当前打开的页面为:"+activity.getClass().getSimpleName());
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
};
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
public class LgqLogPlus {
private static int sCurrentLogLevel = Log.DEBUG;
private static String sPrefix = null;
@IntDef({ Log.VERBOSE, Log.DEBUG, Log.INFO, Log.WARN, Log.ERROR })
@Retention(RetentionPolicy.SOURCE)
public @interface LogLevel {
}
/**
* 初始化LogPlus,可选
*
* @param prefix Tag前缀,可以防止 RIL,IMS,AT,GSM,STK,CDMA,SMS 开头的log不会被打印
* @param logLevel 打log等级
*/
public static void init(String prefix, @LogLevel int logLevel) {
if (prefix != null) {
prefix = prefix.trim();
if (prefix.length() > 0) {
sPrefix = prefix;
}
}
sCurrentLogLevel = logLevel;
}
public static void v(@Nullable String tag, String msg, @Nullable Throwable tr) {
log(Log.VERBOSE, tag, msg, tr);
}
public static void v(@Nullable String tag, String msg) {
log(Log.VERBOSE, tag, msg, null);
}
public static void v(String msg, @Nullable Throwable tr) {
log(Log.VERBOSE, null, msg, tr);
}
public static void v(String msg) {
log(Log.VERBOSE, null, msg, null);
}
public static void d(@Nullable String tag, String msg, @Nullable Throwable tr) {
log(Log.DEBUG, tag, msg, tr);
}
public static void d(@Nullable String tag, String msg) {
log(Log.DEBUG, "lgq---------"+tag, msg, null);
}
public static void d(String msg, @Nullable Throwable tr) {
log(Log.DEBUG, null, msg, tr);
}
public static void d(String msg) {
log(Log.DEBUG, null, "lgq---dcg------"+msg, null);
}
public static void i(@Nullable String tag, String msg, @Nullable Throwable tr) {
log(Log.INFO, tag, msg, tr);
}
public static void i(@Nullable String tag, String msg) {
log(Log.INFO, tag, msg, null);
}
public static void i(String msg, @Nullable Throwable tr) {
log(Log.INFO, null, msg, tr);
}
public static void i(String msg) {
log(Log.INFO, null, "lgq---dcgiii------"+msg, null);
// log(Log.INFO, null, msg, null);
}
public static void w(@Nullable String tag, String msg, @Nullable Throwable tr) {
log(Log.WARN, tag, msg, tr);
}
public static void w(@Nullable String tag, String msg) {
log(Log.WARN, tag, msg, null);
}
public static void w(String msg, @Nullable Throwable tr) {
log(Log.WARN, null, msg, tr);
}
public static void w(String msg) {
log(Log.WARN, null, msg, null);
}
public static void e(@Nullable String tag, String msg, @Nullable Throwable tr) {
log(Log.ERROR, tag, msg, tr);
}
public static void e(@Nullable String tag, String msg) {
log(Log.ERROR, tag, msg, null);
}
public static void e(String msg, @Nullable Throwable tr) {
log(Log.ERROR, null, msg, tr);
}
public static void e(String msg) {
log(Log.ERROR, null, "lgq---dcg错误------"+msg, null);
}
private static void log(int logLevel, String tag, String msg, Throwable tr) {
if (logLevel < sCurrentLogLevel) {
return;
}
StackTraceElement e = Thread.currentThread().getStackTrace()[4];
String fileName = e.getFileName();
int lineNum = e.getLineNumber();
String methodName = e.getMethodName();
StringBuilder sb = new StringBuilder();
sb.append(methodName)
.append('(')
.append(fileName)
.append(':')
.append(lineNum)
.append(')')
.append(msg);
msg = sb.toString();
sb.delete(0, sb.length());
// 注意,如果tag是"IMS"开头的(还有其他),log会不打印,所以加个"前缀_"
// 参考这里 http://stackoverflow.com/a/36469141/5324526
if (sPrefix != null) {
sb.append(sPrefix).append('_');
}
if (tag == null || tag.length() == 0 || tag.trim().length() == 0) {
String className = e.getClassName();
int index = className.lastIndexOf('.') + 1;
sb.append(className, index, className.length());
} else {
sb.append(tag);
}
tag = sb.toString();
if (tr == null) {
switch (logLevel) {
case Log.VERBOSE:
Log.v(tag, msg);
break;
case Log.DEBUG:
Log.d(tag, msg);
break;
case Log.INFO:
Log.i(tag, msg);
break;
case Log.WARN:
Log.w(tag, msg);
break;
case Log.ERROR:
Log.e(tag, msg);
break;
}
} else {
switch (logLevel) {
case Log.VERBOSE:
Log.v(tag, msg, tr);
break;
case Log.DEBUG:
Log.d(tag, msg, tr);
break;
case Log.INFO:
Log.i(tag, msg, tr);
break;
case Log.WARN:
Log.w(tag, msg, tr);
break;
case Log.ERROR:
Log.e(tag, msg, tr);
break;
}
}
}
}
相关文章:
Application工具方法
//注册这个接口registerActivityLifecycleCallbacks(activityLifecycleCallbacks);}Overridepublic void onTerminate() {//注销这个接口。unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);super.onTerminate();}public static List<Activity> activi…...
电脑游戏怎么录屏?其实很简单,只需要简单3步
电脑游戏一直是游戏爱好者最热衷的游戏之一。但是,有时候我们想分享我们在游戏中的精彩时刻,或者记录我们的游戏过程以便后续观看和学习。在这种情况下,录屏就成了必不可少的工具。但是,许多人可能不知道电脑游戏怎么录屏。在本文…...
【设计模式】go语言中的 [函数选项,单例,工厂,责任链] 常用的设计模式
文章目录前言一、函数选项模式二、单例模式三、工厂模式四、责任链模式前言 宿舍每人 温度38℃+ 大寄 设计模式很重要,设计模式其实就是为了解决某一类问题而形成的代码写法,设计模式很多,但是并不是每个都很常用,我们…...
2017系统分析师案例分析真题背记内容
前言 以下内容仅为个人根据当年系分案例真题问题整理的偏需要记背的考点答案,方便个人背诵和记忆使用。方便文字转语音,所以内容全为纯文字内容,以下内容仅供参考。 背记内容 微服务 微服务中应该包含的内容有:资源、对资源的…...
C++和C的区别
答:从宏观角度和微观角度分析微观角度:函数原型有区别,在c中,函数原型有参数和没有参数是不同的,并且允许申明多个同名的函数,只要他们的参数列表不同或者返回值不同即可,但是在c语言中不能。C引…...
【React教程】一、React简介
一、React简介 React是一个用于构建用户界面的JavaScript库,它是Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源。React主要用于构建Ul,很多人认为React 是 MVC 中的 V(视图)。由于拥有较高的性能&…...
运动蓝牙耳机什么牌子好,比较好的运动蓝牙耳机推荐
现在市面上的运动蓝牙耳机越来越多,在选择耳机的时候应该如何入手呢?最重要的是需要按照自己的需求来选择,但在耳机的配置上不能忽视的是耳机的防水等级,运动耳机对防水等级的要求更高,这样能够更好地防御汗水浸湿耳机…...
[深入理解SSD系列 闪存实战2.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?
前言 为了利用好闪存, 发挥闪存的优势, 以达到更好的性能和使用寿命, 那自然要求了解闪存特性。 闪存作为一种相对较新的存储介质, 有很多特别的特性。 一.闪存的特性 凡是采用Flash Memory的存储设备,可以统称为闪存存储。我们经常谈的固态硬盘(SSD),可以由volatile/…...
DJI ROS dji_sdk 源码分析|整体框架
DJI ROS dji_sdk 源码分析|整体框架launch文件CMakeLists.txtcpp文件main.cppOSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上(如Manifold 2),开发者通过调用OSDK 中指定的接口能够…...
HT32合泰单片机开发环境搭建和配置教程
HT32合泰(Holtek)单片机开发环境搭建安装教程 前言 最近在准备合泰杯的比赛,在看合泰官方的PPT和数据手册学习,顺便做个合泰单片机的开发环境搭建教程。 合泰杯比赛发放的开发板是ESK32-30501,用的单片机是HT32F52352。 合泰杯官网地址&a…...
动态内存分配之伙伴算法
伙伴算法 伙伴算法是一种在计算机内存管理中使用的算法,用于分配和释放内存。它是一种基于二叉树的动态内存分配算法,可以高效地分配和合并内存块。伙伴算法是一种按照固定大小分配内存的算法,例如,每个内存块的大小为2的n次幂&a…...
CGAL 根据扫描线方向和角度对法向量进行重定向
目录一、算法原理1、主要函数二、代码实现一、算法原理 最小生成树对法向量定向的结果在具有许多尖锐特征和遮挡的机载点云数据中结果并不理想。scanline_orient_normals()是专门用于具有扫描线特性的点云法向量重定向的替代方法。它充分利用了某些激光雷达扫描器的LAS特性&…...
一个C#开发的开源的快速启动工具
更多开源项目请查看:一个专注推荐.Net开源项目的榜单 平常计算机安装软件比较多、或者工作涉及的文件比较多,很多人都会直接放在桌面,一方面不安全,还不容易查找,这时候我们往往,都会放在其他硬盘内&#x…...
Paddle项目调试记录
PaddlePaddle是百度公司提出的深度学习框架。近年来深度学习在很多机器学习领域都有着非常出色的表现,在图像识别、语音识别、自然语言处理、机器人、网络广告投放、医学自动诊断和金融等领域有着广泛应用。面对繁多的应用场景,深度学习框架有助于建模者…...
3月11日,30秒知全网,精选7个热点
///微盟集团宣布接入百度文心一言 据介绍,微盟SaaS产品和数字营销服务将与文心一言的技术能力实现深度融合,通过AIGC技术,深化微盟在营销AI创意内容生产、智能营销、智能客服、智能经营等方面的布局 ///T3出行与华为云深化业务合作 双方将在…...
C win32基础学习(四)
上一篇我们已经介绍了关于窗口处理函数的知识。本篇我们说一下注册窗口类,创建窗口和显示窗口的内容。 前文 窗口创建过程 定义WinMain函数 定义窗口处理函数(自定义,处理消息) 注册窗口类(向操作系统写入一些数据) 创建窗口&…...
Java 日期时间API(Java 8及以上)
Java 8及以上版本提供了新的日期时间API,其中包括了LocalDate、LocalTime、LocalDateTime、ZonedDateTime、Duration、Period等类,这些类提供了更加丰富和灵活的日期时间操作方法。 LocalDate LocalDate类表示一个本地日期,不包含时间和时区…...
DHCP的配置
实验目的熟悉DHCP的应用场景掌握DHCP的配置方法实验拓扑DHCP的配置如图15-2所示: 图15-2:DHCP的配置 实验步骤配置IP地址<Huawei>system-view Enter system view, return user view with Ctrl+Z....
JavaWeb14-线程池
目录 1.传统线程的缺点 2.线程池的定义 3.线程池的优点 4.线程池的创建/使用(2类7种) 4.1.通过Executors(执行器)自动创建(6种) ①Executors.newFixedThreadPool:创建⼀个固定⼤⼩的线程池…...
[qiankun+nuxt]子应用请求本地文件报错404
前言 目前公司的前端架构是qiankunnuxt做的微前端项目 问题说明 在子应用中,前端需要模拟一些数据,方便后期演示调整而不需要重新打包 所以将一些数据存储到了本地的json文件中,但是获取时报了404的错误,找不到该文件。 页面报错…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
