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的错误,找不到该文件。 页面报错…...
Duix.Avatar本地部署实战:从零搭建AI数字人视频生成平台
Duix.Avatar本地部署实战:从零搭建AI数字人视频生成平台 【免费下载链接】Duix-Avatar 项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar 你是否希望在自己的电脑上拥有一个专属的AI数字人助手?Duix.Avatar作为硅基智能推出的开源…...
终极指南:深度解析ExplorerBlurMica如何用3大核心技术重塑Windows文件资源管理器透明美化体验
终极指南:深度解析ExplorerBlurMica如何用3大核心技术重塑Windows文件资源管理器透明美化体验 【免费下载链接】ExplorerBlurMica Add background Blur effect or Acrylic (Mica for win11) effect to explorer for win10 and win11 项目地址: https://gitcode.co…...
自动驾驶避障算法实战:从动态规划(DP)到模型预测控制(MPC)的Matlab代码详解
自动驾驶避障算法实战:从动态规划到模型预测控制的Matlab实现 自动驾驶技术的核心挑战之一是如何在复杂环境中实现安全避障。本文将深入探讨两种主流算法——动态规划(DP)与模型预测控制(MPC)的代码级实现,通过Matlab示例展示它们如何协同工作来解决这一…...
三步突破语音克隆音质瓶颈:VoxCPM ZipEnhancer全解析
三步突破语音克隆音质瓶颈:VoxCPM ZipEnhancer全解析 【免费下载链接】VoxCPM VoxCPM: Tokenizer-Free TTS for Context-Aware Speech Generation and True-to-Life Voice Cloning 项目地址: https://gitcode.com/GitHub_Trending/vo/VoxCPM 在语音合成领域&…...
银河麒麟V4.0.2-sp4系统初始化实战:网络、DNS与软件源一站式配置指南
1. 银河麒麟V4.0.2-sp4网络配置实战 刚装完系统的银河麒麟服务器就像刚交房的新家,水电网络都没通。作为系统管理员,配置网络就是给服务器"通水电"的第一步。我遇到过不少新手直接照着网上教程操作,结果把网卡配置搞乱导致服务器失…...
别再让用户点‘拒绝‘了!微信小程序订阅消息 wx.requestSubscribeMessage 的完整避坑指南(附版本兼容代码)
微信小程序订阅消息实战:从用户拒绝到高授权率的完整策略 每次看到后台统计里那惨淡的订阅消息授权率,作为开发者的你是否感到无力?用户总是习惯性点击"拒绝",而你可能连解释的机会都没有。这不是你的代码有问题&#x…...
深入理解Linux工作队列:从schedule_work到自定义队列的进阶指南
深入理解Linux工作队列:从schedule_work到自定义队列的进阶指南 在Linux内核开发中,工作队列(workqueue)是一种非常重要的异步任务处理机制。它允许开发者将任务推迟执行,从而避免阻塞当前进程或中断上下文。对于需要优…...
PyQt5实战:手把手教你打造PPT风格的颜色+线型组合下拉框(附完整源码)
PyQt5高级控件开发:打造Office风格的颜色与线型组合选择器 在桌面应用开发中,提供直观、专业的样式选择控件是提升用户体验的关键。本文将深入探讨如何利用PyQt5构建一个功能完备的Office风格组合选择器,集成颜色选择、线型设置和粗细调整等核…...
炸锅!中科院分区永久停更,新锐分区接棒,科研圈要变天?
最近科研圈最大的瓜,莫过于中科院期刊分区的“换马甲”事件——运行22年的官方中科院分区正式谢幕,原团队转身推出“新锐期刊分区”,一石激起千层浪,不同立场的声音吵翻了论坛。今天就来梳理下整个事件的来龙去脉,拆解…...
大模型入门指南:小白程序员必看,收藏学习路径!
一、基础通用概念AI(人工智能) 让机器模拟人类智能(感知、推理、学习、决策)的技术总称。 ML(机器学习) AI 的核心分支:让机器从数据中自动学习规律,不用逐条写规则。 DL(…...
