Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YDL-Component-Medical
Overview
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
杨凯
YDL-Component-Medical
Commits
5e73794b
Commit
5e73794b
authored
Mar 02, 2020
by
konghaorui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
补充未注册模块异常拦截逻辑
parent
98b8fdeb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
256 additions
and
205 deletions
+256
-205
DemoAppLifecycles.java
app/src/main/java/com/ydl/component/base/DemoAppLifecycles.java
+0
-198
DemoAppLifecycles.kt
app/src/main/java/com/ydl/component/base/DemoAppLifecycles.kt
+241
-0
ModularServiceManager.kt
ydl-platform/src/main/java/com/ydl/ydlcommon/modular/ModularServiceManager.kt
+4
-7
ServiceNotFoundException.java
ydl-platform/src/main/java/com/ydl/ydlcommon/modular/ServiceNotFoundException.java
+11
-0
No files found.
app/src/main/java/com/ydl/component/base/DemoAppLifecycles.java
deleted
100644 → 0
View file @
98b8fdeb
package
com
.
ydl
.
component
.
base
;
import
android.app.Application
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Process
;
import
android.support.annotation.RequiresApi
;
import
com.channel.ydl_flutter_base.plugin.YDLCommonPlugin
;
import
com.facebook.stetho.Stetho
;
import
com.meituan.android.walle.WalleChannelReader
;
import
com.tencent.bugly.crashreport.CrashReport
;
import
com.tencent.smtt.sdk.QbSdk
;
import
com.umeng.analytics.MobclickAgent
;
import
com.umeng.commonsdk.UMConfigure
;
import
com.umeng.socialize.PlatformConfig
;
import
com.umeng.socialize.UMShareAPI
;
import
com.ydl.component.BuildConfig
;
import
com.ydl.component.MainActivity
;
import
com.ydl.media.audio.PlayService
;
import
com.ydl.ydlcommon.base.config.HttpConfig
;
import
com.ydl.ydlcommon.base.config.YDLConstants
;
import
com.ydl.ydlcommon.base.delegate.IAppLifecycles
;
import
com.ydl.ydlcommon.utils.AppProgressUtils
;
import
com.ydl.ydlcommon.utils.LogUtil
;
import
com.ydl.ydlcommon.utils.YdlBuryPointUtil
;
import
com.yidianling.im.config.NimApplication
;
import
com.yidianling.tests.home.plugin.TestPlugin
;
import
org.jetbrains.annotations.NotNull
;
import
java.util.HashMap
;
import
io.flutter.view.FlutterMain
;
/**
* Created by haorui on 2019-09-02.
* Des:
*/
public
class
DemoAppLifecycles
implements
IAppLifecycles
{
@Override
public
void
attachBaseContext
(
@NotNull
Context
base
)
{
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
ICE_CREAM_SANDWICH
)
@Override
public
void
onCreate
(
@NotNull
Application
application
)
{
//模块初始化
moduleInit
(
application
);
if
(
AppProgressUtils
.
isMainProcess
(
application
))
{
//第三方SDK初始化
initThirdServiceSDK
(
application
);
//Flutter 初始化需要在主线程中执行
FlutterMain
.
startInitialization
(
application
);
TestPlugin
.
Companion
.
setTestDelegate
(()
->
false
);
YDLCommonPlugin
.
Companion
.
setPluginDelegate
(()
->
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"platform_main_theme"
,
"#34CD65"
);
return
map
;
});
// FlutterMain.ensureInitializationComplete(application, null);
//
// FlutterEngine flutterEngine = new FlutterEngine(application);
// flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
// YDLCommonPlugin plugin = new YDLCommonPlugin();
// flutterEngine.getLocalizationChannel().channel.setMethodCallHandler(plugin);
Intent
intent
=
new
Intent
(
application
,
PlayService
.
class
);
application
.
startService
(
intent
);
// application.registerActivityLifecycleCallbacks(new CoursePlayLifecycle());
Stetho
.
initializeWithDefaults
(
application
);
}
}
@Override
public
void
onTerminate
(
@NotNull
Application
application
)
{
}
private
void
moduleInit
(
Application
application
)
{
NimApplication
.
getInstance
().
initIm
(
application
,
MainActivity
.
class
);
}
private
void
initThirdServiceSDK
(
Application
application
)
{
new
Thread
()
{
@Override
public
void
run
()
{
super
.
run
();
//设置线程优先级,不与主线程抢资源
Process
.
setThreadPriority
(
Process
.
THREAD_PRIORITY_BACKGROUND
);
//子线程中初始化X5内核,防止ANR问题
initX5
(
application
);
if
(
DemoGlobalConfig
.
appEnv
.
equals
(
YDLConstants
.
ENV_PROD
))
{
// YDLavManager.Companion.getInstances().init(application, "3387e9b251f3491e9221a9877e8f7830");
}
else
{
// YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
}
//bugly
String
packageName
=
application
.
getPackageName
();
String
channel
=
WalleChannelReader
.
getChannel
(
application
);
if
(
channel
==
null
||
channel
.
equals
(
"null"
))
{
channel
=
"test"
;
}
CrashReport
.
UserStrategy
strategy
=
new
CrashReport
.
UserStrategy
(
application
);
strategy
.
setAppChannel
(
channel
);
String
appkey
=
BuildConfig
.
DEBUG
?
"630a3a5cea"
:
"3939e71afa"
;
CrashReport
.
initCrashReport
(
application
,
appkey
,
BuildConfig
.
DEBUG
,
strategy
);
//umeng
String
umAppkey
=
null
;
if
(
BuildConfig
.
FLAVOR
.
endsWith
(
"ydl"
))
{
umAppkey
=
"56970affe0f55a9cda001e24"
;
channel
=
"android_"
+
channel
;
initUM
(
umAppkey
,
channel
,
application
);
PlatformConfig
.
setWeixin
(
"wx57a9d930270498c7"
,
"17c031f02500ded3457a80e69d8e5e45"
);
PlatformConfig
.
setQQZone
(
"1105070461"
,
"6BvkUnk6wXJekcgR"
);
}
else
if
(
BuildConfig
.
FLAVOR
.
endsWith
(
"xlzx"
))
{
umAppkey
=
"5859e1656e27a42fa400021f"
;
channel
=
"ATK_7_android_"
+
channel
;
initUM
(
umAppkey
,
channel
,
application
);
PlatformConfig
.
setWeixin
(
"wx1c6af5a11b5f531f"
,
"1ddb93abbb2d81e604657d38e94a5720"
);
PlatformConfig
.
setQQZone
(
"1107931541"
,
"8dCvxUpi525uPGTJ"
);
}
// 选用AUTO页面采集模式
MobclickAgent
.
setPageCollectionMode
(
MobclickAgent
.
PageMode
.
AUTO
);
MobclickAgent
.
setCatchUncaughtExceptions
(!
BuildConfig
.
DEBUG
);
//开启友盟集成测试
UMConfigure
.
setLogEnabled
(
BuildConfig
.
DEBUG
);
HttpConfig
.
Companion
.
getInstance
().
initSocketConfig
(()
->
{
//数据埋点初始化 (一定要放在主进程中/因为用到了umeng统计,需要放在umeng初始化后)
YdlBuryPointUtil
.
init
(
application
,
true
);
});
//安全检测
//YDLAppProtector.init();
}
}.
start
();
}
private
void
initUM
(
String
umAppKey
,
String
channel
,
Application
application
)
{
/**
* 初始化common库
* 参数1:上下文,不能为空
* 参数2:友盟 app key
* 参数3:友盟 channel
* 参数4:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机
* 参数5:Push推送业务的secret
*/
UMConfigure
.
init
(
application
,
umAppKey
,
channel
,
UMConfigure
.
DEVICE_TYPE_PHONE
,
null
);
UMShareAPI
.
init
(
application
,
umAppKey
);
}
/**
* 初始化X5内核
*
* @param application
*/
private
void
initX5
(
Application
application
)
{
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
// HashMap map = new HashMap();
// map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
// QbSdk.initTbsSettings(map);
// if (!QbSdk.isTbsCoreInited()) {//// preinit只需要调用一次,如果已经完成了初始化,那么就直接构造view
// QbSdk.preInit(application, null);// 设置X5初始化完成的回调接口
// }
QbSdk
.
PreInitCallback
cb
=
new
QbSdk
.
PreInitCallback
()
{
@Override
public
void
onViewInitFinished
(
boolean
arg0
)
{
//初始化完成回调
LogUtil
.
i
(
"QbSdk onViewInitFinished:"
+
arg0
);
}
@Override
public
void
onCoreInitFinished
()
{
LogUtil
.
i
(
"QbSdk onCoreInitFinished"
);
}
};
QbSdk
.
initX5Environment
(
application
,
cb
);
}
}
\ No newline at end of file
app/src/main/java/com/ydl/component/base/DemoAppLifecycles.kt
0 → 100644
View file @
5e73794b
package
com.ydl.component.base
import
android.app.Application
import
android.content.Context
import
android.content.Intent
import
android.os.Build
import
android.os.Looper
import
android.os.Process
import
android.support.annotation.RequiresApi
import
android.util.Log
import
com.channel.ydl_flutter_base.plugin.YDLCommonPlugin
import
com.facebook.stetho.Stetho
import
com.meituan.android.walle.WalleChannelReader
import
com.tencent.bugly.crashreport.CrashReport
import
com.tencent.smtt.sdk.QbSdk
import
com.umeng.analytics.MobclickAgent
import
com.umeng.commonsdk.UMConfigure
import
com.umeng.socialize.PlatformConfig
import
com.umeng.socialize.UMShareAPI
import
com.ydl.component.BuildConfig
import
com.ydl.component.MainActivity
import
com.ydl.media.audio.PlayService
import
com.ydl.ydlcommon.actions.crash.Cockroach
import
com.ydl.ydlcommon.actions.crash.ExceptionHandler
import
com.ydl.ydlcommon.base.config.HttpConfig
import
com.ydl.ydlcommon.base.config.YDLConstants
import
com.ydl.ydlcommon.base.delegate.IAppLifecycles
import
com.ydl.ydlcommon.utils.AppProgressUtils
import
com.ydl.ydlcommon.utils.LogUtil
import
com.ydl.ydlcommon.utils.YdlBuryPointUtil
import
com.ydl.ydlcommon.utils.log.LogHelper
import
com.yidianling.common.tools.ToastUtil
import
com.yidianling.im.config.NimApplication
import
com.yidianling.tests.home.plugin.TestPlugin
import
io.flutter.view.FlutterMain
import
io.reactivex.functions.Action
/**
* Created by haorui on 2019-09-02.
* Des:
*/
class
DemoAppLifecycles
:
IAppLifecycles
{
override
fun
attachBaseContext
(
base
:
Context
)
{
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
ICE_CREAM_SANDWICH
)
override
fun
onCreate
(
application
:
Application
)
{
//模块初始化
moduleInit
(
application
)
if
(
AppProgressUtils
.
isMainProcess
(
application
))
{
//第三方SDK初始化
initThirdServiceSDK
(
application
)
//Flutter 初始化需要在主线程中执行
FlutterMain
.
startInitialization
(
application
)
TestPlugin
.
testDelegate
=
object
:
TestPlugin
.
TestPluginDelegate
{
override
fun
getHideBack
():
Boolean
{
return
false
}
}
YDLCommonPlugin
.
pluginDelegate
=
object
:
YDLCommonPlugin
.
CommonPluginDelegate
{
override
fun
getAppTheme
():
HashMap
<
String
,
String
>
{
val
map
=
HashMap
<
String
,
String
>()
map
[
"platform_main_theme"
]
=
"#34CD65"
return
map
}
}
// FlutterMain.ensureInitializationComplete(application, null);
//
// FlutterEngine flutterEngine = new FlutterEngine(application);
// flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
// YDLCommonPlugin plugin = new YDLCommonPlugin();
// flutterEngine.getLocalizationChannel().channel.setMethodCallHandler(plugin);
val
intent
=
Intent
(
application
,
PlayService
::
class
.
java
)
application
.
startService
(
intent
)
// application.registerActivityLifecycleCallbacks(new CoursePlayLifecycle());
Stetho
.
initializeWithDefaults
(
application
)
}
}
override
fun
onTerminate
(
application
:
Application
)
{}
private
fun
moduleInit
(
application
:
Application
)
{
NimApplication
.
getInstance
().
initIm
(
application
,
MainActivity
::
class
.
java
)
}
private
fun
initThirdServiceSDK
(
application
:
Application
)
{
object
:
Thread
()
{
override
fun
run
()
{
super
.
run
()
//设置线程优先级,不与主线程抢资源
Process
.
setThreadPriority
(
Process
.
THREAD_PRIORITY_BACKGROUND
)
//子线程中初始化X5内核,防止ANR问题
initX5
(
application
)
if
(
DemoGlobalConfig
.
appEnv
==
YDLConstants
.
ENV_PROD
)
{
// YDLavManager.Companion.getInstances().init(application, "3387e9b251f3491e9221a9877e8f7830");
}
else
{
// YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
}
//异常拦截
installCockroach
(
application
)
//bugly
val
packageName
=
application
.
packageName
var
channel
=
WalleChannelReader
.
getChannel
(
application
)
if
(
channel
==
null
||
channel
==
"null"
)
{
channel
=
"test"
}
val
strategy
=
CrashReport
.
UserStrategy
(
application
)
strategy
.
appChannel
=
channel
val
appkey
=
if
(
BuildConfig
.
DEBUG
)
"630a3a5cea"
else
"3939e71afa"
// CrashReport.initCrashReport(application, appkey, BuildConfig.DEBUG, strategy)
//umeng
var
umAppkey
:
String
?
=
null
if
(
BuildConfig
.
FLAVOR
.
endsWith
(
"ydl"
))
{
umAppkey
=
"56970affe0f55a9cda001e24"
channel
=
"android_$channel"
initUM
(
umAppkey
,
channel
,
application
)
PlatformConfig
.
setWeixin
(
"wx57a9d930270498c7"
,
"17c031f02500ded3457a80e69d8e5e45"
)
PlatformConfig
.
setQQZone
(
"1105070461"
,
"6BvkUnk6wXJekcgR"
)
}
else
if
(
BuildConfig
.
FLAVOR
.
endsWith
(
"xlzx"
))
{
umAppkey
=
"5859e1656e27a42fa400021f"
channel
=
"ATK_7_android_$channel"
initUM
(
umAppkey
,
channel
,
application
)
PlatformConfig
.
setWeixin
(
"wx1c6af5a11b5f531f"
,
"1ddb93abbb2d81e604657d38e94a5720"
)
PlatformConfig
.
setQQZone
(
"1107931541"
,
"8dCvxUpi525uPGTJ"
)
}
// 选用AUTO页面采集模式
MobclickAgent
.
setPageCollectionMode
(
MobclickAgent
.
PageMode
.
AUTO
)
MobclickAgent
.
setCatchUncaughtExceptions
(!
BuildConfig
.
DEBUG
)
//开启友盟集成测试
UMConfigure
.
setLogEnabled
(
BuildConfig
.
DEBUG
)
HttpConfig
.
getInstance
().
initSocketConfig
(
Action
{
//数据埋点初始化 (一定要放在主进程中/因为用到了umeng统计,需要放在umeng初始化后)
YdlBuryPointUtil
.
init
(
application
,
true
)
})
//安全检测
//YDLAppProtector.init();
}
}.
start
()
}
private
fun
initUM
(
umAppKey
:
String
?,
channel
:
String
?,
application
:
Application
)
{
/**
* 初始化common库
* 参数1:上下文,不能为空
* 参数2:友盟 app key
* 参数3:友盟 channel
* 参数4:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机
* 参数5:Push推送业务的secret
*/
UMConfigure
.
init
(
application
,
umAppKey
,
channel
,
UMConfigure
.
DEVICE_TYPE_PHONE
,
null
)
UMShareAPI
.
init
(
application
,
umAppKey
)
}
/**
* 初始化X5内核
*
* @param application
*/
private
fun
initX5
(
application
:
Application
)
{
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
// HashMap map = new HashMap();
// map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
// QbSdk.initTbsSettings(map);
// if (!QbSdk.isTbsCoreInited()) {//// preinit只需要调用一次,如果已经完成了初始化,那么就直接构造view
// QbSdk.preInit(application, null);// 设置X5初始化完成的回调接口
// }
val
cb
=
object
:
QbSdk
.
PreInitCallback
{
override
fun
onViewInitFinished
(
arg0
:
Boolean
)
{
//初始化完成回调
LogUtil
.
i
(
"QbSdk onViewInitFinished:$arg0"
)
}
override
fun
onCoreInitFinished
()
{
LogUtil
.
i
(
"QbSdk onCoreInitFinished"
)
}
}
QbSdk
.
initX5Environment
(
application
,
cb
)
}
/**
* 初始化异常拦截器
*/
private
fun
installCockroach
(
application
:
Application
)
{
val
sysExcepHandler
=
Thread
.
getDefaultUncaughtExceptionHandler
()
Cockroach
.
install
(
application
,
object
:
ExceptionHandler
()
{
override
fun
onUncaughtExceptionHappened
(
thread
:
Thread
,
throwable
:
Throwable
)
{
if
(
BuildConfig
.
DEBUG
)
{
ToastUtil
.
toastShort
(
throwable
.
message
)
}
LogHelper
.
getInstance
().
writeLogSync
(
throwable
.
localizedMessage
)
LogHelper
.
getInstance
().
uploadLog
(
false
)
}
override
fun
onBandageExceptionHappened
(
throwable
:
Throwable
)
{
throwable
.
printStackTrace
()
//打印警告级别log,该throwable可能是最开始的bug导致的,无需关心
LogHelper
.
getInstance
().
writeLogSync
(
throwable
.
localizedMessage
)
}
override
fun
onEnterSafeMode
()
{}
override
fun
onMayBeBlackScreen
(
e
:
Throwable
?)
{
val
thread
=
Looper
.
getMainLooper
().
thread
Log
.
e
(
"AndroidRuntime"
,
"--->onUncaughtExceptionHappened:$thread<---"
,
e
)
//黑屏时建议直接杀死app
sysExcepHandler
.
uncaughtException
(
thread
,
RuntimeException
(
"black screen"
))
LogHelper
.
getInstance
().
writeLogSync
(
e
!!
.
localizedMessage
)
}
})
}
}
\ No newline at end of file
ydl-platform/src/main/java/com/ydl/ydlcommon/modular/ModularServiceManager.kt
View file @
5e73794b
package
com.ydl.ydlcommon.modular
import
com.alibaba.android.arouter.exception.NoRouteFoundException
import
com.alibaba.android.arouter.facade.template.IProvider
import
com.alibaba.android.arouter.launcher.ARouter
import
com.ydl.ydlcommon.utils.LogUtil
/**
* Created by haorui on 2019-09-21 .
* Des:查找 Arouter 服务封装类
...
...
@@ -32,7 +30,6 @@ object ModularServiceManager {
val
navigation
=
ARouter
.
getInstance
()
.
build
(
path
)
.
navigation
()
?:
throw
NoRouteFoundException
(
"Please check if you are dependent on the module containing $simpleName , path is $path"
)
provider
=
navigation
as
IProvider
...
...
@@ -40,6 +37,7 @@ object ModularServiceManager {
}
catch
(
e
:
Exception
)
{
LogUtil
.
e
(
e
.
message
)
return
throw
ServiceNotFoundException
(
"请检查您是否依赖于包含以下内容的模块: $simpleName, path is $path"
)
}
return
provider
as
T
...
...
@@ -49,19 +47,18 @@ object ModularServiceManager {
var
provider
:
IProvider
?
=
null
val
simpleName
=
clz
.
simpleName
;
if
(
routerMap
[
simpleName
]!=
null
){
return
routerMap
[
simpleName
]
as
T
}
try
{
provider
=
ARouter
.
getInstance
().
navigation
(
clz
)
if
(
provider
==
null
){
throw
NoRouteFoundException
(
"Please check if you are dependent on the module containing $simpleName
"
)
LogUtil
.
e
(
"provide : Service Not Found
"
)
}
routerMap
[
simpleName
]
=
provider
}
catch
(
e
:
Exception
)
{
LogUtil
.
e
(
e
.
message
)
LogUtil
.
e
(
e
.
toString
())
return
throw
ServiceNotFoundException
(
"请检查您是否依赖于包含以下内容的模块: $simpleName"
)
}
return
provider
as
T
...
...
ydl-platform/src/main/java/com/ydl/ydlcommon/modular/ServiceNotFoundException.java
0 → 100644
View file @
5e73794b
package
com
.
ydl
.
ydlcommon
.
modular
;
/**
* Created by haorui on 2020-03-02.
* Des:
*/
public
class
ServiceNotFoundException
extends
RuntimeException
{
public
ServiceNotFoundException
(
String
message
)
{
super
(
message
);
}
}
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