Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
Sobot_module_Dev
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sobot_android
Sobot_module_Dev
Commits
29c28144
Commit
29c28144
authored
Dec 14, 2021
by
app_dev@sobot.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sobot utils 1.0.4
parent
f9f25485
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
238 additions
and
103 deletions
+238
-103
SobotGlobalContext.java
.../main/java/com/sobot/common/utils/SobotGlobalContext.java
+232
-0
SobotImageUtils.java
...src/main/java/com/sobot/common/utils/SobotImageUtils.java
+4
-1
SobotPathManager.java
...rc/main/java/com/sobot/common/utils/SobotPathManager.java
+1
-1
sobot-utils-publish-mavencentral.gradle
sobot_utils/sobot-utils-publish-mavencentral.gradle
+1
-1
SobotGlobalContext.java
...ils/src/main/java/com/sobot/utils/SobotGlobalContext.java
+0
-72
SobotUtils.java
sobot_utils/src/main/java/com/sobot/utils/SobotUtils.java
+0
-28
No files found.
sobot_common/src/main/java/com/sobot/common/utils/SobotGlobalContext.java
0 → 100644
View file @
29c28144
package
com
.
sobot
.
common
.
utils
;
import
android.app.Activity
;
import
android.app.Application
;
import
android.content.Context
;
import
com.sobot.utils.SobotLogUtils
;
import
java.lang.ref.WeakReference
;
import
java.util.Iterator
;
import
java.util.Stack
;
/**
* @Description: 全局上下文
* @Author: znw
* @Date: 2021/7/19 下午2:17
* @Version: 1.0
*/
public
class
SobotGlobalContext
{
private
Context
mApplicationContext
;
// 使用弱引用是因为存在未使用AppManager的finish方法来释放的activity,但mActivityStack并未断开对其应用导致内存泄露的问题
private
Stack
<
WeakReference
<
Activity
>>
mActivityStack
;
private
SobotGlobalContext
()
{
}
public
static
void
init
(
Application
context
)
{
if
(
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
==
null
&&
context
!=
null
)
{
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
=
context
;
}
}
public
static
SobotGlobalContext
getInstance
()
{
return
SobotGlobalContext
.
GlobalContext
.
globalContext
;
}
public
static
SobotGlobalContext
getInstance
(
Context
context
)
{
if
(
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
==
null
&&
context
!=
null
)
{
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
=
context
;
}
return
SobotGlobalContext
.
GlobalContext
.
globalContext
;
}
public
static
Context
getAppContext
(
Context
context
)
{
if
(
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
==
null
&&
context
!=
null
)
{
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
=
context
.
getApplicationContext
();
}
return
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
;
}
public
static
Context
getAppContext
()
{
return
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
;
}
private
static
class
GlobalContext
{
private
static
final
SobotGlobalContext
globalContext
=
new
SobotGlobalContext
();
private
GlobalContext
()
{
}
}
/**
* 添加Activity到堆栈
*
* @param activity activity实例
*/
public
void
addActivity
(
Activity
activity
)
{
if
(
mActivityStack
==
null
)
{
mActivityStack
=
new
Stack
<>();
}
mActivityStack
.
add
(
new
WeakReference
<>(
activity
));
}
/**
* 检查弱引用是否释放,若释放,则从栈中清理掉该元素
*/
public
void
checkWeakReference
()
{
if
(
mActivityStack
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
temp
=
activityReference
.
get
();
if
(
temp
==
null
)
{
it
.
remove
();
// 使用迭代器来进行安全的加锁操作
}
}
}
}
/**
* 获取当前Activity(栈中最后一个压入的)
*
* @return 当前(栈顶)activity
*/
public
Activity
currentActivity
()
{
checkWeakReference
();
if
(
mActivityStack
!=
null
&&
!
mActivityStack
.
isEmpty
())
{
return
mActivityStack
.
lastElement
().
get
();
}
return
null
;
}
/**
* 结束除当前activtiy以外的所有activity
* 注意:不能使用foreach遍历并发删除,会抛出java.util.ConcurrentModificationException的异常
*
* @param activtiy 不需要结束的activity
*/
public
void
finishOtherActivity
(
Activity
activtiy
)
{
if
(
mActivityStack
!=
null
&&
activtiy
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
temp
=
activityReference
.
get
();
if
(
temp
==
null
)
{
// 清理掉已经释放的activity
it
.
remove
();
continue
;
}
if
(
temp
!=
activtiy
)
{
it
.
remove
();
// 使用迭代器来进行安全的加锁操作
temp
.
finish
();
}
}
}
}
/**
* 结束除这一类activtiy以外的所有activity
*
* @param cls 指定的某类activity
*/
public
void
finishOtherActivity
(
Class
<?>
cls
)
{
if
(
mActivityStack
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
activity
=
activityReference
.
get
();
if
(
activity
==
null
)
{
// 清理掉已经释放的activity
it
.
remove
();
continue
;
}
if
(!
activity
.
getClass
().
equals
(
cls
))
{
it
.
remove
();
// 使用迭代器来进行安全的加锁操作
activity
.
finish
();
}
}
}
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public
void
finishActivity
()
{
Activity
activity
=
currentActivity
();
if
(
activity
!=
null
)
{
finishActivity
(
activity
);
}
}
/**
* 结束指定的Activity
*
* @param activity 指定的activity实例
*/
public
void
finishActivity
(
Activity
activity
)
{
if
(
activity
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
temp
=
activityReference
.
get
();
if
(
temp
==
null
)
{
// 清理掉已经释放的activity
it
.
remove
();
continue
;
}
if
(
temp
==
activity
)
{
it
.
remove
();
}
}
activity
.
finish
();
}
}
/**
* 结束指定类名的所有Activity
*
* @param cls 指定的类的class
*/
public
void
finishActivity
(
Class
<?>
cls
)
{
if
(
mActivityStack
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
activity
=
activityReference
.
get
();
if
(
activity
==
null
)
{
// 清理掉已经释放的activity
it
.
remove
();
continue
;
}
if
(
activity
.
getClass
().
equals
(
cls
))
{
it
.
remove
();
activity
.
finish
();
}
}
}
}
/**
* 结束所有Activity
*/
public
void
finishAllActivity
()
{
if
(
mActivityStack
!=
null
)
{
for
(
Iterator
<
WeakReference
<
Activity
>>
it
=
mActivityStack
.
iterator
();
it
.
hasNext
();
)
{
WeakReference
<
Activity
>
activityReference
=
it
.
next
();
Activity
activity
=
activityReference
.
get
();
if
(
activity
!=
null
)
{
activity
.
finish
();
}
}
mActivityStack
.
clear
();
}
}
/**
* 退出应用程序
*/
public
void
exitApp
()
{
try
{
finishAllActivity
();
// 退出JVM(java虚拟机),释放所占内存资源,0表示正常退出(非0的都为异常退出)
System
.
exit
(
0
);
// 从操作系统中结束掉当前程序的进程
android
.
os
.
Process
.
killProcess
(
android
.
os
.
Process
.
myPid
());
}
catch
(
Exception
e
)
{
SobotLogUtils
.
e
(
"Exit exception"
,
e
);
}
}
}
\ No newline at end of file
sobot_
utils/src/main/java/com/sobot
/utils/SobotImageUtils.java
→
sobot_
common/src/main/java/com/sobot/common
/utils/SobotImageUtils.java
View file @
29c28144
package
com
.
sobot
.
utils
;
package
com
.
sobot
.
common
.
utils
;
import
android.annotation.TargetApi
;
import
android.annotation.TargetApi
;
import
android.content.ContentResolver
;
import
android.content.ContentResolver
;
...
@@ -20,6 +20,9 @@ import android.provider.MediaStore;
...
@@ -20,6 +20,9 @@ import android.provider.MediaStore;
import
android.provider.OpenableColumns
;
import
android.provider.OpenableColumns
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
com.sobot.utils.SobotIOUtils
;
import
com.sobot.utils.SobotLogUtils
;
import
java.io.BufferedInputStream
;
import
java.io.BufferedInputStream
;
import
java.io.BufferedOutputStream
;
import
java.io.BufferedOutputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.ByteArrayOutputStream
;
...
...
sobot_
utils/src/main/java/com/sobot
/utils/SobotPathManager.java
→
sobot_
common/src/main/java/com/sobot/common
/utils/SobotPathManager.java
View file @
29c28144
package
com
.
sobot
.
utils
;
package
com
.
sobot
.
common
.
utils
;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Build
;
import
android.os.Build
;
...
...
sobot_utils/sobot-utils-publish-mavencentral.gradle
View file @
29c28144
...
@@ -12,7 +12,7 @@ task androidSourcesJar(type: Jar) {
...
@@ -12,7 +12,7 @@ task androidSourcesJar(type: Jar) {
ext
{
ext
{
PUBLISH_GROUP_ID
=
"com.sobot.library"
//项目包名
PUBLISH_GROUP_ID
=
"com.sobot.library"
//项目包名
PUBLISH_ARTIFACT_ID
=
'utils'
//项目名
PUBLISH_ARTIFACT_ID
=
'utils'
//项目名
PUBLISH_VERSION
=
'1.0.
2
'
//版本号
PUBLISH_VERSION
=
'1.0.
4
'
//版本号
}
}
...
...
sobot_utils/src/main/java/com/sobot/utils/SobotGlobalContext.java
deleted
100644 → 0
View file @
f9f25485
package
com
.
sobot
.
utils
;
import
android.app.Activity
;
import
android.content.Context
;
import
java.util.LinkedList
;
import
java.util.List
;
/**
* @Description: 全局上下文
* @Author: znw
* @Date: 2021/7/19 下午2:17
* @Version: 1.0
*/
public
class
SobotGlobalContext
{
private
Context
mApplicationContext
;
private
List
<
Activity
>
activityList
=
new
LinkedList
<
Activity
>();
private
SobotGlobalContext
()
{
}
public
static
SobotGlobalContext
getInstance
(
Context
context
)
{
if
(
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
==
null
&&
context
!=
null
)
{
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
=
context
;
}
return
SobotGlobalContext
.
GlobalContext
.
globalContext
;
}
public
static
Context
getAppContext
(
Context
context
)
{
if
(
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
==
null
&&
context
!=
null
)
{
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
=
context
.
getApplicationContext
();
}
return
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
;
}
public
static
Context
getAppContext
()
{
return
SobotGlobalContext
.
GlobalContext
.
globalContext
.
mApplicationContext
;
}
private
static
class
GlobalContext
{
private
static
final
SobotGlobalContext
globalContext
=
new
SobotGlobalContext
();
private
GlobalContext
()
{
}
}
// 添加activity到容器中
public
void
addActivity
(
Activity
aty
)
{
activityList
.
add
(
aty
);
}
/*退出时关闭所有的activity*/
public
void
exit
()
{
for
(
Activity
activity
:
activityList
)
{
activity
.
finish
();
}
}
/*获取智齿最后一个activity*/
public
Activity
getLastActivity
()
{
if
(
activityList
!=
null
&&
activityList
.
size
()
>
0
)
{
return
activityList
.
get
(
activityList
.
size
()
-
1
);
}
return
null
;
}
public
void
deleteActivity
(
Activity
aty
)
{
activityList
.
remove
(
aty
);
}
}
\ No newline at end of file
sobot_utils/src/main/java/com/sobot/utils/SobotUtils.java
deleted
100644 → 0
View file @
f9f25485
package
com
.
sobot
.
utils
;
import
android.content.Context
;
/**
* @Description: Sobot 工具类
* @Author: znw
* @Date: 2021/7/19 下午2:41
* @Version: 1.0
*/
public
class
SobotUtils
{
/**
* 工具类初始化
*
* @param context
*/
public
static
void
init
(
Context
context
)
{
if
(
context
==
null
)
{
SobotLogUtils
.
e
(
"SobotUtils init: context is null, please check!"
);
}
else
{
Context
applicationContext
=
context
.
getApplicationContext
();
SobotGlobalContext
.
getInstance
(
applicationContext
);
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment