Commit 50f69bbc by 王涛55

feat:组件间的功能调研

parent dc5b779c
...@@ -3,7 +3,6 @@ package com.hikcreate.app; ...@@ -3,7 +3,6 @@ package com.hikcreate.app;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import com.hikcreate.base.BaseActivityLifeLogic; import com.hikcreate.base.BaseActivityLifeLogic;
/** /**
......
...@@ -3,9 +3,10 @@ package com.hikcreate.app; ...@@ -3,9 +3,10 @@ package com.hikcreate.app;
import android.app.Application; import android.app.Application;
import com.hikcreate.base.AppContext; import com.hikcreate.base.AppContext;
import com.hikcreate.data.config.ActivityLifeCycleInitConfig;
import com.hikcreate.data.config.AppInitConfig;
/** /**
* 类说明
* *
* @author wangtao55 * @author wangtao55
* @date 2019/9/23 * @date 2019/9/23
...@@ -16,19 +17,22 @@ public class CommonApplication extends Application { ...@@ -16,19 +17,22 @@ public class CommonApplication extends Application {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
registerAppLife(); registerAppInit();
registerActivityLife(); registerActivityLife();
AppContext.getInstance().logicOnCreate(this); AppContext.getInstance().logicOnCreate(this);
} }
private void registerAppInit(){
private void registerAppLife(){ //登录组件
AppContext.getInstance().registerAppLogic("com.login.LoginAppLogic"); AppContext.getInstance().registerAppLogic(AppInitConfig.LOGIN_CONFIG);
AppContext.getInstance().registerAppLogic("com.hikcreate.app.AppAppLogic"); //app壳组件
AppContext.getInstance().registerAppLogic(AppInitConfig.APP_CONFIG);
} }
private void registerActivityLife(){ private void registerActivityLife(){
AppContext.getInstance().registerActivityLifeLogic("com.login.LoginActivityLifeCycle"); //登录组件的acitivity生命周期监控
AppContext.getInstance().registerActivityLifeLogic("com.hikcreate.app.AppActivityLifeCycle"); AppContext.getInstance().registerActivityLifeLogic(ActivityLifeCycleInitConfig.LOGIN_CONFIG);
//app壳组件的acitivity生命周期监控
AppContext.getInstance().registerActivityLifeLogic(ActivityLifeCycleInitConfig.APP_CONFIG);
} }
@Override @Override
......
package com.hikcreate.data.config;
/**
* Activity初始化的配置类
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class ActivityLifeCycleInitConfig {
//login
public static final String LOGIN_CONFIG = "com.init.LoginActivityLifeCycle";
//app
public static final String APP_CONFIG = "com.hikcreate.app.AppActivityLifeCycle";
}
package com.hikcreate.data.config;
/**
* App初始化的配置类
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class AppInitConfig {
//login
public static final String LOGIN_CONFIG = "com.init.LoginAppLogic";
//App
public static final String APP_CONFIG = "com.hikcreate.app.AppAppLogic";
}
package com.hikcreate.data.config;
/**
* 功能Provider定义类
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class AppProvider {
//登录模块 Provider
public static final String LOGIN_PROVIDER = "login_provider";
public static final String PWD_PROVIDER = "pwd_provider";
//登录模块Aciton
public static final String LOGIN_ACTION = "login_action";
public static final String PWD_ACTION = "pwd_action";
}
package com.hikcreate.login.moduel.router.action.change;
import android.content.Context;
import com.hikcreate.module_router.ModuleAction;
import com.hikcreate.module_router.ModuleActionResult;
import java.util.HashMap;
/**
* 修改密码
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class ChangePwd extends ModuleAction {
@Override
public boolean isAsync(Context context, HashMap<String, String> requestData) {
return false;
}
@Override
public ModuleActionResult invoke(Context context, HashMap<String, String> requestData) {
return null;
}
}
package com.hikcreate.login.moduel.router.action.login;
import android.content.Context;
import com.hikcreate.module_router.ModuleAction;
import com.hikcreate.module_router.ModuleActionResult;
import java.util.HashMap;
/**
* 登录action
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class LoginAction extends ModuleAction {
@Override
public boolean isAsync(Context context, HashMap<String, String> requestData) {
return false;
}
@Override
public ModuleActionResult invoke(Context context, HashMap<String, String> requestData) {
ModuleActionResult result = new ModuleActionResult.Builder()
.code(ModuleActionResult.CODE_SUCCESS)
.msg("登录成功")
.data("我是来自登录界面的诗句")
.object(null)
.build();
return null;
}
}
package com.hikcreate.login.moduel.router.provider;
import com.hikcreate.login.moduel.router.action.change.ChangePwd;
import com.hikcreate.login.moduel.router.action.login.LoginAction;
import com.hikcreate.module_router.ModuleProvider;
import static com.hikcreate.data.config.AppProvider.PWD_ACTION;
/**
* 登录Provider
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class ChangePwdProvider extends ModuleProvider {
@Override
protected void registerActions() {
registerAction(PWD_ACTION,new ChangePwd());
}
}
package com.hikcreate.login.moduel.router.provider;
import com.hikcreate.login.moduel.router.action.login.LoginAction;
import com.hikcreate.module_router.ModuleProvider;
import static com.hikcreate.data.config.AppProvider.LOGIN_ACTION;
/**
* 登录Provider
*
* @author wangtao55
* @date 2019/9/24
* @mail wangtao55@hikcreate.com
*/
public class LoginProvider extends ModuleProvider {
@Override
protected void registerActions() {
registerAction(LOGIN_ACTION,new LoginAction());
}
}
...@@ -2,8 +2,14 @@ package com.hikcreate.login; ...@@ -2,8 +2,14 @@ package com.hikcreate.login;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.app.login.R; import com.app.login.R;
import com.hikcreate.base.AppContext;
import com.hikcreate.data.config.AppProvider;
import com.hikcreate.module_router.LocalRouter;
import com.hikcreate.module_router.router.RouterRequest;
import com.hikcreate.module_router.router.RouterResponse;
/** /**
* 类说明 * 类说明
...@@ -18,6 +24,19 @@ public class testLoginActivity extends AppCompatActivity { ...@@ -18,6 +24,19 @@ public class testLoginActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.lg_app_test); setContentView(R.layout.lg_app_test);
findViewById(R.id.mBtnLogin).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
// RouterResponse response = LocalRouter.getInstance(AppContext.getInstance())
// .route(testLoginActivity.this,
// RouterRequest.obtain(testLoginActivity.this).provider(AppProvider.LOGIN_ACTION)
// .action("sync")
// .data("1", "Hello")
// .data("2", "World"));
}
});
} }
@Override @Override
......
...@@ -3,6 +3,12 @@ package com.hikcreate.test; ...@@ -3,6 +3,12 @@ package com.hikcreate.test;
import android.app.Application; import android.app.Application;
import com.hikcreate.base.AppContext; import com.hikcreate.base.AppContext;
import com.hikcreate.data.config.ActivityLifeCycleInitConfig;
import com.hikcreate.data.config.AppInitConfig;
import com.hikcreate.data.config.AppProvider;
import com.hikcreate.login.moduel.router.provider.ChangePwdProvider;
import com.hikcreate.login.moduel.router.provider.LoginProvider;
import com.hikcreate.module_router.LocalRouter;
/** /**
* *
...@@ -15,11 +21,17 @@ public class CommonApplication extends Application { ...@@ -15,11 +21,17 @@ public class CommonApplication extends Application {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
AppContext.getInstance().registerAppLogic("com.login.LoginAppLogic"); AppContext.getInstance().registerAppLogic(AppInitConfig.LOGIN_CONFIG);
AppContext.getInstance().registerActivityLifeLogic("com.login.LoginActivityLifeCycle"); AppContext.getInstance().registerActivityLifeLogic(ActivityLifeCycleInitConfig.LOGIN_CONFIG);
AppContext.getInstance().logicOnCreate(this); AppContext.getInstance().logicOnCreate(this);
} }
private void initProviderCreate(){
LocalRouter.getInstance(AppContext.getInstance()).registerProvider(AppProvider.LOGIN_PROVIDER,new LoginProvider());
LocalRouter.getInstance(AppContext.getInstance()).registerProvider(AppProvider.PWD_PROVIDER,new ChangePwdProvider());
}
@Override @Override
public void onTerminate() { public void onTerminate() {
super.onTerminate(); super.onTerminate();
......
package com.login; package com.init;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
......
package com.login; package com.init;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.util.Log; import android.util.Log;
......
...@@ -33,6 +33,25 @@ android { ...@@ -33,6 +33,25 @@ android {
} }
} }
compileOptions {
encoding = 'utf-8'
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
if (rootProject.build_module == build_module_passport) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
exclude 'com/hikcreate/test/**'
}
}
}
}
dexOptions { dexOptions {
preDexLibraries = false preDexLibraries = false
} }
......
package com.hikcreate.init;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
import com.hikcreate.base.BaseActivityLifeLogic;
/**
*
* @author wangtao55
* @date 2019/9/23
* @mail wangtao55@hikcreate.com
*/
public class PassPortActivityLifeCycle extends BaseActivityLifeLogic {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Toast.makeText(activity,"我来到了登录页面",Toast.LENGTH_LONG).show();
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle savedInstanceState) {
}
}
package com.hikcreate.init;
import android.content.res.Configuration;
import android.util.Log;
import com.hikcreate.base.BaseAppLogic;
/**
* 类说明
*
* @author wangtao55
* @date 2019/9/23
* @mail wangtao55@hikcreate.com
*/
public class PassPortAppLogic extends BaseAppLogic {
@Override
public void onCreate() {
Log.v("LoginAppLogic","onCreate--------------------->");
}
@Override
public void onTerminate() {
Log.v("LoginAppLogic","onTerminate--------------------->");
}
@Override
public void onLowMemory() {
Log.v("LoginAppLogic","onLowMemory--------------------->");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.v("LoginAppLogic","onConfigurationChanged--------------------->");
}
}
package com.hikcreate.test;
import android.app.Application;
import com.hikcreate.base.AppContext;
/**
*
* @author wangtao55
* @date 2019/9/23
* @mail wangtao55@hikcreate.com
*/
public class CommonApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AppContext.getInstance().registerAppLogic("com.hikcreate.init.PassPortAppLogic");
AppContext.getInstance().registerActivityLifeLogic("com.hikcreate.init.PassPortActivityLifeCycle");
AppContext.getInstance().logicOnCreate(this);
}
@Override
public void onTerminate() {
super.onTerminate();
AppContext.getInstance().logicOnTerminate();
}
@Override
public void onLowMemory() {
super.onLowMemory();
AppContext.getInstance().logicOnLowMemory();
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="com.app.login"> package="com.app.login">
<application
android:roundIcon="@mipmap/ic_launcher"
android:allowBackup="false"
android:name="com.hikcreate.test.CommonApplication"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:icon="@mipmap/ic_launcher"
android:label="passport"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:icon,android:roundIcon,android:theme,android:label,android:allowBackup">
</application>
</manifest> </manifest>
\ No newline at end of file
...@@ -19,4 +19,4 @@ ext.build_modele_passport_resourcePrefix = "passport_" ...@@ -19,4 +19,4 @@ ext.build_modele_passport_resourcePrefix = "passport_"
ext.build_modele_baidu_resourcePrefix = "baidu_" ext.build_modele_baidu_resourcePrefix = "baidu_"
//当前运行的model //当前运行的model
ext.build_module = build_module_login ext.build_module = build_module_app
package com.hikcreate.module_router;
import android.content.Context;
import java.util.HashMap;
/**
* Created by wanglei on 2016/12/28.
*/
public class ErrorAction extends ModuleAction {
private static final String DEFAULT_MESSAGE = "Something was really wrong. Ha ha!";
private int mCode;
private String mMessage;
private boolean mAsync;
public ErrorAction() {
mCode = ModuleActionResult.CODE_ERROR;
mMessage = DEFAULT_MESSAGE;
mAsync = false;
}
public ErrorAction(boolean isAsync,int code, String message) {
this.mCode = code;
this.mMessage = message;
this.mAsync = isAsync;
}
@Override
public boolean isAsync(Context context, HashMap<String, String> requestData) {
return mAsync;
}
@Override
public ModuleActionResult invoke(Context context, HashMap<String, String> requestData) {
ModuleActionResult result = new ModuleActionResult.Builder()
.code(mCode)
.msg(mMessage)
.data(null)
.object(null)
.build();
return result;
}
}
package com.hikcreate.module_router;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.NonNull;
import com.hikcreate.base.AppContext;
import com.hikcreate.module_router.router.RouterRequest;
import com.hikcreate.module_router.router.RouterResponse;
import com.hikcreate.module_router.tools.Logger;
import com.hikcreate.module_router.tools.ProcessUtil;
import java.util.HashMap;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static android.content.Context.BIND_AUTO_CREATE;
/**
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public class LocalRouter {
private static final String TAG = "LocalRouter";
private String mProcessName = ProcessUtil.UNKNOWN_PROCESS_NAME;
private static LocalRouter sInstance = null;
private HashMap<String, ModuleProvider> mProviders = null;
private AppContext mApplication;
private static ExecutorService threadPool = null;
private LocalRouter(AppContext context) {
mApplication = context;
mProcessName = ProcessUtil.getProcessName(context.getApplication(), ProcessUtil.getMyProcessId());
mProviders = new HashMap<>();
}
public static synchronized LocalRouter getInstance(@NonNull AppContext context) {
if (sInstance == null) {
sInstance = new LocalRouter(context);
}
return sInstance;
}
private static synchronized ExecutorService getThreadPool() {
if (null == threadPool) {
threadPool = Executors.newCachedThreadPool();
}
return threadPool;
}
public void registerProvider(String providerName, ModuleProvider provider) {
mProviders.put(providerName, provider);
}
boolean answerWiderAsync(@NonNull RouterRequest routerRequest) {
if (mProcessName.equals(routerRequest.getDomain())) {
return findRequestAction(routerRequest).isAsync(mApplication.getApplication(), routerRequest.getData());
} else {
return true;
}
}
public RouterResponse route(Context context, @NonNull RouterRequest routerRequest) throws Exception {
Logger.d(TAG, "Process:" + mProcessName + "\nLocal route start: " + System.currentTimeMillis());
RouterResponse routerResponse = new RouterResponse();
// Local request
if (mProcessName.equals(routerRequest.getDomain())) {
Object attachment = routerRequest.getAndClearObject();
HashMap<String, String> params = new HashMap<>(routerRequest.getData());
Logger.d(TAG, "Process:" + mProcessName + "\nLocal find action start: " + System.currentTimeMillis());
ModuleAction targetAction = findRequestAction(routerRequest);
routerRequest.isIdle.set(true);
Logger.d(TAG, "Process:" + mProcessName + "\nLocal find action end: " + System.currentTimeMillis());
routerResponse.mIsAsync = attachment == null ? targetAction.isAsync(context, params) : targetAction.isAsync(context, params, attachment);
// Sync result, return the result immediately.
if (!routerResponse.mIsAsync) {
ModuleActionResult result = attachment == null ? targetAction.invoke(context, params) : targetAction.invoke(context, params, attachment);
routerResponse.mResultString = result.toString();
routerResponse.mObject = result.getObject();
Logger.d(TAG, "Process:" + mProcessName + "\nLocal sync end: " + System.currentTimeMillis());
}
// Async result, use the thread pool to execute the task.
else {
LocalTask task = new LocalTask(routerResponse, params, attachment, context, targetAction);
routerResponse.mAsyncResponse = getThreadPool().submit(task);
}
}
return routerResponse;
}
private ModuleAction findRequestAction(RouterRequest routerRequest) {
ModuleProvider targetProvider = mProviders.get(routerRequest.getProvider());
ErrorAction defaultNotFoundAction = new ErrorAction(false, ModuleActionResult.CODE_NOT_FOUND, "Not found the action.");
if (null == targetProvider) {
return defaultNotFoundAction;
} else {
ModuleAction targetAction = targetProvider.findAction(routerRequest.getAction());
if (null == targetAction) {
return defaultNotFoundAction;
} else {
return targetAction;
}
}
}
private class LocalTask implements Callable<String> {
private RouterResponse mResponse;
private HashMap<String, String> mRequestData;
private Context mContext;
private ModuleAction mAction;
private Object mObject;
LocalTask(RouterResponse routerResponse, HashMap<String, String> requestData, Object object, Context context, ModuleAction maAction) {
this.mContext = context;
this.mResponse = routerResponse;
this.mRequestData = requestData;
this.mAction = maAction;
this.mObject = object;
}
@Override
public String call() throws Exception {
ModuleActionResult result = mObject == null ? mAction.invoke(mContext, mRequestData) : mAction.invoke(mContext, mRequestData, mObject);
mResponse.mObject = result.getObject();
Logger.d(TAG, "Process:" + mProcessName + "\nLocal async end: " + System.currentTimeMillis());
return result.toString();
}
}
}
package com.hikcreate.module_router;
import android.content.Context;
import java.util.HashMap;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public abstract class ModuleAction {
public abstract boolean isAsync(Context context, HashMap<String,String> requestData);
public abstract ModuleActionResult invoke(Context context, HashMap<String,String> requestData);
public boolean isAsync(Context context, HashMap<String,String> requestData,Object object){
return false;
}
public ModuleActionResult invoke(Context context, HashMap<String,String> requestData, Object object){
return new ModuleActionResult.Builder().code(ModuleActionResult.CODE_NOT_IMPLEMENT).
msg("This method has not yet been implemented.").build();
}
}
package com.hikcreate.module_router;
import org.json.JSONException;
import org.json.JSONObject;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public class ModuleActionResult {
public static final int CODE_SUCCESS = 0x0000;
public static final int CODE_ERROR = 0x0001;
public static final int CODE_NOT_FOUND = 0X0002;
public static final int CODE_INVALID = 0X0003;
public static final int CODE_ROUTER_NOT_REGISTER = 0X0004;
public static final int CODE_CANNOT_BIND_LOCAL = 0X0005;
public static final int CODE_REMOTE_EXCEPTION = 0X0006;
public static final int CODE_CANNOT_BIND_WIDE = 0X0007;
public static final int CODE_TARGET_IS_WIDE = 0X0008;
public static final int CODE_WIDE_STOPPING = 0X0009;
public static final int CODE_NOT_IMPLEMENT = 0X000a;
private int code;
private String msg;
private String data;
private Object object;
private ModuleActionResult(Builder builder) {
this.code = builder.mCode;
this.msg = builder.mMsg;
this.data = builder.mData;
this.object = builder.mObject;
}
public Object getObject() {
return object;
}
public String getData() {
return data;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
@Override
public String toString() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("code", code);
jsonObject.put("msg", msg);
jsonObject.put("data", data);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject.toString();
}
public static class Builder {
private int mCode;
private String mMsg;
private Object mObject;
private String mData;
public Builder() {
mCode = CODE_ERROR;
mMsg = "";
mObject = null;
mData = null;
}
public Builder resultString(String resultString) {
try {
JSONObject jsonObject = new JSONObject(resultString);
this.mCode = jsonObject.getInt("code");
this.mMsg = jsonObject.getString("msg");
this.mData = jsonObject.getString("data");
} catch (JSONException e) {
e.printStackTrace();
}
return this;
}
public Builder code(int code) {
this.mCode = code;
return this;
}
public Builder msg(String msg) {
this.mMsg = msg;
return this;
}
public Builder data(String data) {
this.mData = data;
return this;
}
public Builder object(Object object) {
this.mObject = object;
return this;
}
public ModuleActionResult build() {
return new ModuleActionResult(this);
}
}
}
package com.hikcreate.module_router;
import java.util.HashMap;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public abstract class ModuleProvider {
private boolean mValid = true;
private HashMap<String, ModuleAction> mActions;
public ModuleProvider(){
mActions = new HashMap<>();
registerActions();
}
protected void registerAction(String actionName, ModuleAction action){
mActions.put(actionName,action);
}
public ModuleAction findAction(String actionName){
return mActions.get(actionName);
}
public boolean isValid(){
return mValid;
}
protected abstract void registerActions();
}
package com.hikcreate.module_router.router;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public class RouterResponse {
/**
* This field is MaActionResult.toString()
*/
public String mResultString;
public boolean mIsAsync = true;
public Future<String> mAsyncResponse;
public Object mObject;
private static final int TIME_OUT = 30 * 1000;
private long mTimeOut = 0;
private boolean mHasGet = false;
int mCode = -1;
String mMessage = "";
String mData;
public RouterResponse() {
this(TIME_OUT);
}
public RouterResponse(long timeout) {
if (timeout > TIME_OUT * 2 || timeout < 0) {
timeout = TIME_OUT;
}
mTimeOut = timeout;
}
public boolean isAsync() {
return mIsAsync;
}
public String get() throws Exception {
if (mIsAsync) {
mResultString = mAsyncResponse.get(mTimeOut, TimeUnit.MILLISECONDS);
parseResult();
}else{
parseResult();
}
return mResultString;
}
private void parseResult(){
if (!mHasGet) {
try {
JSONObject jsonObject = new JSONObject(mResultString);
this.mCode = jsonObject.getInt("code");
this.mMessage = jsonObject.getString("msg");
this.mData = jsonObject.getString("data");
} catch (JSONException e) {
e.printStackTrace();
}
mHasGet = true;
}
}
public int getCode() throws Exception {
if (!mHasGet) {
get();
}
return mCode;
}
public String getMessage() throws Exception {
if (!mHasGet) {
get();
}
return mMessage;
}
public String getData() throws Exception {
if (!mHasGet) {
get();
}
return mData;
}
public Object getObject() throws Exception {
if (!mHasGet) {
get();
}
return mObject;
}
}
package com.hikcreate.module_router.tools;
import android.util.Log;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public class Logger {
public final static int ERROR = 1;
public final static int WARN = 2;
public final static int INFO = 3;
public final static int DEBUG = 4;
public final static int VERBOSE = 5;
public static int LOG_LEVEL = ERROR;
public static void e(String tag, String msg) {
if (LOG_LEVEL >= ERROR)
Log.e(tag, msg);
}
public static void w(String tag, String msg) {
if (LOG_LEVEL >= WARN)
Log.w(tag, msg);
}
public static void i(String tag, String msg) {
if (LOG_LEVEL >= INFO)
Log.i(tag, msg);
}
public static void d(String tag, String msg) {
if (LOG_LEVEL >= DEBUG)
Log.d(tag, msg);
}
public static void v(String tag, String msg) {
if (LOG_LEVEL >= VERBOSE)
Log.v(tag, msg);
}
}
package com.hikcreate.module_router.tools;
import android.app.ActivityManager;
import android.content.Context;
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.List;
/**
*
* @author wangtao55
* @date 2019/9/19
* @mail wangtao55@hikcreate.com
*/
public class ProcessUtil {
public static final String UNKNOWN_PROCESS_NAME = "unknown_process_name";
public static int getMyProcessId() {
return android.os.Process.myPid();
}
public static String getProcessName(int pid) {
String processName = UNKNOWN_PROCESS_NAME;
try {
File file = new File("/proc/" + pid + "/" + "cmdline");
BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
processName = mBufferedReader.readLine().trim();
mBufferedReader.close();
return processName;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (!TextUtils.isEmpty(processName)) {
return processName;
}
}
return UNKNOWN_PROCESS_NAME;
}
public static String getProcessName(Context context, int pid) {
String processName = getProcessName(pid);
if(UNKNOWN_PROCESS_NAME.equals(processName)){
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
if (runningApps == null) {
return UNKNOWN_PROCESS_NAME;
}
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
}else{
return processName;
}
return UNKNOWN_PROCESS_NAME;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment