Android 实例解说Application类
版本:1.0
日期:2014.3.28
版权:© 2014 kince 转载注明出处
何为Application,有何用途?Google官方文档是这样说的:维护全局应用程序的状态,使用的时候继承于它创建一个子类即可,同时在AndroidManifest.xml文件的<application> 标签的name属性制定它的名字,也就是子类名称。当应用程序的包被创建的时候这个类就会被实例化,而且它的生命周期和应用程序是一样的。不过Google在下面的提示中也说道大多数情况下不需要使用这个类,因为如果应用程序使用了单例模式的话,效果和Application提供的事一样的,而且也更加容易控制、规范。
import android.annotation.TargetApi;
import android.app.Application;
import android.content.Context;
import android.os.Build.VERSION;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import java.io.PrintStream;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpProtocolParams;public class MyApplicationextends Application
{private HttpClient httpClient;public boolean isLogin = false;private HttpClient createHttpClient(){BasicHttpParams localBasicHttpParams = new BasicHttpParams();HttpProtocolParams.setVersion(localBasicHttpParams, HttpVersion.HTTP_1_1);HttpProtocolParams.setContentCharset(localBasicHttpParams, "ISO-8859-1");HttpProtocolParams.setUseExpectContinue(localBasicHttpParams, true);HttpConnectionParams.setConnectionTimeout(localBasicHttpParams, 20000);HttpConnectionParams.setSoTimeout(localBasicHttpParams, 20000);HttpConnectionParams.setSocketBufferSize(localBasicHttpParams, 8192);SchemeRegistry localSchemeRegistry = new SchemeRegistry();localSchemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));localSchemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));return new DefaultHttpClient(new ThreadSafeClientConnManager(localBasicHttpParams, localSchemeRegistry), localBasicHttpParams);}public static void initImageLoader(Context paramContext){ImageLoaderConfiguration localImageLoaderConfiguration = new ImageLoaderConfiguration.Builder(paramContext).threadPriority(3).denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).writeDebugLogs().build();ImageLoader.getInstance().init(localImageLoaderConfiguration);}private void shutdownHttpClient(){if ((this.httpClient != null) && (this.httpClient.getConnectionManager() != null)) {this.httpClient.getConnectionManager().shutdown();}}public HttpClient getHttpClient(){return this.httpClient;}@TargetApi(9)public void onCreate(){super.onCreate();this.httpClient = createHttpClient();System.out.println(Build.VERSION.SDK_INT);initImageLoader(getApplicationContext());}public void onLowMemory(){super.onLowMemory();shutdownHttpClient();}public void onTerminate(){super.onTerminate();shutdownHttpClient();}public static class Config{public static final boolean DEVELOPER_MODE;}
}
从import导入的包就可以看出来,在这个类里面使用了强大的universalimageloader异步加载图片以及使用的apache的HttpClient。然后整体看一下这个类,发现它不仅重载了onCreate()方法,还重载了onLowMemory()以及onTerminate()方法。onLowMemory()顾名思义就是在Android系统内存低的情况下调用的,可以在这个方法里面做一下释放内存的功能。
this.httpClient = createHttpClient();System.out.println(Build.VERSION.SDK_INT);initImageLoader(getApplicationContext());
import android.app.Application;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKLocationManager;
import java.io.File;public class Appextends Application
{public static App app;public static boolean hideOtherExchanges = false;public static boolean hideUpdateNotice = false;public BMapManager mBMapMan = null;public String mStrKey = "4BFEB7A7F3E7CD4B0FBAE61BABD11F1E11D7EAC8";public static void delete(File paramFile){if (paramFile.isFile()) {paramFile.delete();}while (!paramFile.isDirectory()) {return;}File[] arrayOfFile = paramFile.listFiles();if ((arrayOfFile == null) || (arrayOfFile.length == 0)){paramFile.delete();return;}for (int i = 0;; i++){if (i >= arrayOfFile.length){paramFile.delete();return;}delete(arrayOfFile[i]);}}public boolean init(){this.mBMapMan = new BMapManager(this);return this.mBMapMan.init(this.mStrKey, new MyGeneralListener());}public void onCreate(){app = this;if (init()) {this.mBMapMan.getLocationManager().setNotifyInternal(10, 5);}super.onCreate();try{localBundle = getPackageManager().getApplicationInfo(getPackageName(), 128).metaData;str2 = localBundle.getString("UMENG_CHANNEL");arrayOfString1 = localBundle.getString("HIDE_OTHER_EXCHANGE_APK_CHANNEL").split(",");i = 0;}catch (Exception localException1){for (;;){Bundle localBundle;String str2;String[] arrayOfString1;int i;String[] arrayOfString2;int j;Logger.w(localException1);continue;i++;continue;label303:if (arrayOfString2[j].equals(str2)) {hideUpdateNotice = true;} else {j++;}}}if (i >= arrayOfString1.length) {}for (;;){arrayOfString2 = localBundle.getString("HIDE_DOUGUO_UPDATE_NOTICE").split(",");j = 0;int k = arrayOfString2.length;if (j < k) {break label303;}WeiboHelper.setConfig(app);RenrenHelper.setConfig(app);DouguoWebAPI.setConfig(app);Logger.setConfig(app);Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(getApplicationContext()));try{String str1 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/douguo/" + getPackageName();File localFile1 = new File(str1);File localFile2 = localFile1.getParentFile();if (!localFile2.exists()) {localFile2.mkdir();}if (!localFile1.exists()) {localFile1.mkdir();}File localFile3 = new File(str1 + "/.nomedia");if (!localFile3.exists()) {localFile3.createNewFile();}return;}catch (Exception localException2){Logger.w(localException2);}if (!arrayOfString1[i].equals(str2)) {break;}hideOtherExchanges = true;}}public void onLowMemory(){super.onLowMemory();Logger.e("!!!!!!!!!!!!!!onLowMemory!!!!!!!!!!!!");}public void onTerminate(){if (this.mBMapMan != null){this.mBMapMan.destroy();this.mBMapMan = null;}super.onTerminate();new Thread(){public void run(){App.delete(new File(Environment.getExternalStorageDirectory() + "/douguo/yummyDiary/"));}}.start();}static class MyGeneralListenerimplements MKGeneralListener{public void onGetNetworkState(int paramInt){Toast.makeText(App.app.getApplicationContext(), "您的网络出错啦!", 1).show();}public void onGetPermissionState(int paramInt) {}}
}
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Application;
import android.content.Context;
import android.os.Process;
import com.baidu.android.silentupdate.SilentManager;
import java.util.Iterator;
import java.util.List;public class FrontiaApplicationextends Application
{private static final String a = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYAFbG0oYmKgh6o7BhZIHf1njBpZXqyWBnYz2ip3Wp+s97OeA/pTe8xebuGJHwq4xbsGQrJWepIbUVrdjm6JRmdvuJhar7/hC/UNnUkJgYdYl10OZKlvcFFgK3V7XGBPplXldDnhbgscna3JG8U3025WSxZCP5vy/8cfxsEoVx5QIDAQAB";public static void initFrontiaApplication(Context paramContext){SilentManager.setKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYAFbG0oYmKgh6o7BhZIHf1njBpZXqyWBnYz2ip3Wp+s97OeA/pTe8xebuGJHwq4xbsGQrJWepIbUVrdjm6JRmdvuJhar7/hC/UNnUkJgYdYl10OZKlvcFFgK3V7XGBPplXldDnhbgscna3JG8U3025WSxZCP5vy/8cfxsEoVx5QIDAQAB");SilentManager.enableRSA(false);SilentManager.loadLib(paramContext.getApplicationContext(), "frontia_plugin", "plugin-deploy.jar");}public void onCreate(){super.onCreate();ActivityManager localActivityManager = (ActivityManager)getSystemService("activity");int i = Process.myPid();Iterator localIterator = localActivityManager.getRunningAppProcesses().iterator();while (localIterator.hasNext()){ActivityManager.RunningAppProcessInfo localRunningAppProcessInfo = (ActivityManager.RunningAppProcessInfo)localIterator.next();if ((localRunningAppProcessInfo.pid == i) && (!localRunningAppProcessInfo.processName.endsWith(getPackageName()))) {initFrontiaApplication(getApplicationContext());}}}
}import android.content.Context;
import com.baidu.frontia.FrontiaApplication;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;public class UILApplicationextends FrontiaApplication
{public static void initImageLoader(Context paramContext){ImageLoaderConfiguration localImageLoaderConfiguration = new ImageLoaderConfiguration.Builder(paramContext).threadPriority(3).denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).build();ImageLoader.getInstance().init(localImageLoaderConfiguration);}public void onCreate(){com.nostra13.universalimageloader.utils.StorageUtils.basePath = "Meishi";com.nostra13.universalimageloader.utils.StorageUtils.childPath = "Temp";com.nostra13.universalimageloader.utils.StorageUtils.childImgName = "imgs";super.onCreate();CrashHandler.getInstance().init(this);initImageLoader(getApplicationContext());}
}
import android.app.Application;
import android.graphics.Bitmap.Config;
import android.text.TextUtils;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import cn.jpush.android.api.BasicPushNotificationBuilder;
import cn.jpush.android.api.JPushInterface;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.DisplayImageOptions.Builder;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import java.util.Calendar;
import java.util.Date;public class AzkAppextends Application
{public static final String BASEURL = Api.BASE_URL;public static DisplayImageOptions avatarOptions;public static DisplayImageOptions defaultOptions;private static AzkApp instance;private static boolean jpushInitied;public static DisplayImageOptions noStubOptions;private final String COOKIEURL = "http://aimeiwei.me";public BDLocation bdLocation;private CookieManager cookieManager;private CookieSyncManager cookieSyncManager;public BMapManager mBMapMan;public LocationClient mLocationClient;public int mapCount;private String nickname = "";private String password = "";private String username = "";private String getBaiduKey(){return AzkHelper.getMetaData(getApplicationContext(), "BAIDU_KEY");}public static AzkApp getInstance(){return instance;}private void initCookieManager(){this.cookieSyncManager = CookieSyncManager.createInstance(this);this.cookieManager = CookieManager.getInstance();this.cookieManager.setAcceptCookie(true);if (isLogin()){String str = this.cookieManager.getCookie("http://aimeiwei.me");if ((str == null) || (!str.contains("username")) || (!str.contains("password"))){AzkHelper.showLog("初始化cookie");setCookie(this.username, this.password);}}showCookie();}private void initHttp(){AzkHelper.showLog("httpClient初始化");Http.initHttp(AzkHelper.sAzkUserAgent);Http.setBaseUrl(Api.API_URL);if ((!TextUtils.isEmpty(this.username)) && (!TextUtils.isEmpty(this.password))) {Http.setUser(this.username, this.password);}}private void initImageLoader(){AzkHelper.showLog("ImageLoader图片加载器初始化");long l1 = Runtime.getRuntime().maxMemory();long l2 = l1 / 1024L / 1024L;AzkHelper.showLog("maxHeap: " + l2);int i = (int)l1 / 4;DisplayImageOptions.Builder localBuilder1 = new DisplayImageOptions.Builder();DisplayImageOptions.Builder localBuilder2 = localBuilder1.showImageOnLoading(2130837835);Bitmap.Config localConfig;ImageScaleType localImageScaleType;label103:int j;label188:ImageLoaderConfiguration.Builder localBuilder6;if (l2 >= 256L){localConfig = Bitmap.Config.ARGB_8888;DisplayImageOptions.Builder localBuilder3 = localBuilder2.bitmapConfig(localConfig);if (l2 < 256L) {break label283;}localImageScaleType = ImageScaleType.IN_SAMPLE_POWER_OF_2;localBuilder3.imageScaleType(localImageScaleType).cacheInMemory(true).cacheOnDisc(true);defaultOptions = localBuilder1.build();DisplayImageOptions.Builder localBuilder4 = new DisplayImageOptions.Builder();localBuilder4.cacheInMemory(true).cacheOnDisc(true);noStubOptions = localBuilder4.build();ImageLoaderConfiguration.Builder localBuilder5 = new ImageLoaderConfiguration.Builder(getApplicationContext()).memoryCacheExtraOptions(Constants.IMAGE_SIZE, Constants.IMAGE_SIZE);if (l2 < 256L) {break label291;}j = 1;localBuilder6 = localBuilder5.threadPriority(5 - j);if (l2 < 256L) {break label297;}}label283:label291:label297:for (int k = 3;; k = 2){ImageLoaderConfiguration localImageLoaderConfiguration = localBuilder6.threadPoolSize(k).memoryCacheSize(i).memoryCache(new WeakMemoryCache()).denyCacheImageMultipleSizesInMemory().defaultDisplayImageOptions(defaultOptions).build();ImageLoader.getInstance().init(localImageLoaderConfiguration);avatarOptions = localBuilder1.displayer(new RoundedBitmapDisplayer(8)).build();return;localConfig = Bitmap.Config.RGB_565;break;localImageScaleType = ImageScaleType.IN_SAMPLE_INT;break label103;j = 2;break label188;}}private void removeCookie(){this.cookieManager.removeSessionCookie();this.cookieManager.removeAllCookie();this.cookieSyncManager.sync();}private void setCookie(String paramString1, String paramString2){Calendar localCalendar = Calendar.getInstance();localCalendar.set(2025, 11, 29);String str = localCalendar.getTime().toString();this.cookieManager.setCookie("http://aimeiwei.me", "username=" + paramString1 + "; path=/; expires=" + str);this.cookieManager.setCookie("http://aimeiwei.me", "password=" + paramString2 + "; path=/; expires=" + str);this.cookieSyncManager.sync();showCookie();}private void setJpushAlias(){AzkHelper.showLog("jpush", "username: " + this.username);JPushInterface.setAliasAndTags(this, this.username, null);}private void showCookie(){String str = this.cookieManager.getCookie("http://aimeiwei.me");AzkHelper.showLog("cookie:" + str);}public String getNickname(){return this.nickname;}public String getPassword(){return this.password;}public String getUsername(){return this.username;}public void initBMapManager(){if (this.mBMapMan == null){this.mBMapMan = new BMapManager(this);String str = getBaiduKey();AzkHelper.showLog("初始化BMapManager, BAIDU_KEY: " + str);this.mBMapMan.init(str, new MKGeneralListener(){public void onGetNetworkState(int paramAnonymousInt){if (paramAnonymousInt == 2) {AzkHelper.showErrorLog("您的网络出错啦!");}}public void onGetPermissionState(int paramAnonymousInt){if (paramAnonymousInt == 300) {AzkHelper.showLog("请输入正确的百度授权Key");}}});}}public void initJpush(){if (jpushInitied) {return;}AzkHelper.showLog("极光推送初始化");AzkHelper.showLog("jpush", "极光推送初始化");JPushInterface.init(this);BasicPushNotificationBuilder localBasicPushNotificationBuilder = new BasicPushNotificationBuilder(this);localBasicPushNotificationBuilder.statusBarDrawable = 2130837777;JPushInterface.setPushNotificationBuilder(Integer.valueOf(1), localBasicPushNotificationBuilder);if (!TextUtils.isEmpty(this.username)) {setJpushAlias();}jpushInitied = true;}public void initMap(){AzkHelper.showLog("百度地图初始化");this.mLocationClient = new LocationClient(this);LocationClientOption localLocationClientOption = new LocationClientOption();localLocationClientOption.setProdName(getString(2131296262));localLocationClientOption.setOpenGps(true);localLocationClientOption.setPriority(2);localLocationClientOption.setAddrType("all");localLocationClientOption.setCoorType("gcj02");this.mLocationClient.setLocOption(localLocationClientOption);this.mLocationClient.setAK(getBaiduKey());initBMapManager();}public boolean isLogin(){boolean bool = true;if ((TextUtils.isEmpty(this.username)) || (TextUtils.isEmpty(this.password))) {bool = false;}return bool;}public boolean isYourself(User paramUser){if ((TextUtils.isEmpty(this.username)) || (paramUser == null)) {return false;}return this.username.equals(paramUser.getId());}public boolean isYourself(UserNew paramUserNew){if ((TextUtils.isEmpty(this.username)) || (paramUserNew == null)) {return false;}return this.username.equals(paramUserNew.getId());}public void onCreate(){AzkHelper.showLog("Application Aimeiwei onCreate");super.onCreate();instance = this;AzkHelper.prepareUserAgent(this);this.username = AzkHelper.getStringPref(this, "username");this.password = AzkHelper.getStringPref(this, "password");this.nickname = AzkHelper.getStringPref(this, "nickname");AzkHelper.showLog("BuildConfig.DEBUG: false");AzkHelper.closeLog();initHttp();initImageLoader();initJpush();initMap();initCookieManager();}public void onLowMemory(){AzkHelper.showLog("onLowMemory");super.onLowMemory();}public void onTerminate(){instance = null;if (this.mBMapMan != null){this.mBMapMan.destroy();this.mBMapMan = null;}super.onTerminate();}public void removeUser(){Http.clearUser();AzkHelper.removePref(this, "username");AzkHelper.removePref(this, "password");AzkHelper.removePref(this, "nickname");this.username = "";this.password = "";this.nickname = "";AccessTokenKeeper.clear(getApplicationContext());removeCookie();}public void removeUser2(){Http.clearUser();AzkHelper.removePref(this, "username");AzkHelper.removePref(this, "password");AzkHelper.removePref(this, "nickname");this.password = "";this.nickname = "";AccessTokenKeeper.clear(getApplicationContext());AccessTokenKeeperForQQ.clear(getApplicationContext());removeCookie();}public void setNickname(String paramString){AzkHelper.setStringPref(this, "nickname", paramString);this.nickname = paramString;}public void setPassword(String paramString){AzkHelper.setStringPref(this, "password", paramString);this.password = paramString;}public void setUser(String paramString1, String paramString2){setUserName(paramString1);setPassword(paramString2);Http.setUser(paramString1, paramString2);}public void setUser(String paramString1, String paramString2, String paramString3){setNickname(paramString3);setUser(paramString1, paramString2);setCookie(paramString1, paramString2);}public void setUserName(String paramString){AzkHelper.setStringPref(this, "username", paramString);this.username = paramString;setJpushAlias();}
}
这个app的实现相对来说还是比较复杂的,但是无非就是初始化一些信息。从import导包可以看到,使用了极光推送、百度地图以及universalimageloader,所以按照之前的分析经验之后一定会在onCreate()方法里面去初始化这些功能的。看一下onCreate()方法:
public void onCreate(){AzkHelper.showLog("Application Aimeiwei onCreate");super.onCreate();instance = this;AzkHelper.prepareUserAgent(this);this.username = AzkHelper.getStringPref(this, "username");this.password = AzkHelper.getStringPref(this, "password");this.nickname = AzkHelper.getStringPref(this, "nickname");AzkHelper.showLog("BuildConfig.DEBUG: false");AzkHelper.closeLog();initHttp();initImageLoader();initJpush();initMap();initCookieManager();}
很清晰明了,从方法名称也可以看出来,就是初始化各种功能。至于具体方法的实现,不多做介绍,感兴趣可以自己去研究。
import android.app.Application;public class APP extends Application{@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();System. out.println("onCreate()" );}@Overridepublic void onLowMemory() {// TODO Auto-generated method stubsuper.onLowMemory();System. out.println("onCreate()" );}@Overridepublic void onTerminate() {// TODO Auto-generated method stubsuper.onTerminate();System. out.println("onCreate()" );}}
Android 实例解说Application类相关推荐
- Android 依赖注入: Dagger 2 实例解说(一)
本文原创,转载请注明出处:http://blog.csdn.net/zjbpku [Duplicated] link to Dagger on Android - Dagger2具体解释 关于D ...
- 在Android开发中怎样使用Application类
转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...
- android application 全局变量 空指针,Android编程之Application设置全局变量及传值用法实例分析...
本文实例讲述了Android编程之Application设置全局变量及传值用法.分享给大家供大家参考,具体如下: /** * 重写Application,主要重写里面的onCreate方法,就是创建的 ...
- Android学习笔记(三)Application类简介
每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...
- android获得application类对象,android之Application类介绍
Application类 application是用来保存全局变量的,并且是在package创建的时候就跟着存在了. 当我们需要创建全局变量的时候,而直接在application中去实现. 只需要调用 ...
- android 快速开发常用工具类,实例详解Android快速开发工具类总结
一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...
- Android中用Application类实现全局变量
在Java中如果要使用全局变量,一般定义public static类型的变量.但是这种方法不符合Android的框架架构,Android中要使用Application context. Applica ...
- Android中Application类用法
Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...
- Android application类
什么是application类? application是维护应用全局状态的基类,应用进程启动时android系统会创建application类并调用类的onCreate()函数,applicatio ...
最新文章
- 【Camera专题】Qcom-高通OTP完全调试指南-上
- 艾伟:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现
- 做程序员如何防止被裁员?我们既要干好主业,也要发展好副业,跟这些公众号大佬们向上生长...
- ASP.NET MVC从视图传递多个模型到Controller
- 视频PPT互动问答丨数据库技术前沿的创新与实践专题
- VB讲课笔记13:二级公共基础
- 快照隔离(Snapshot Isolation)简单介绍和例子
- 中标麒麟打包qt(Shell文本)
- 【Python-GUI开发】四 pyqt5 UI扁平化设计
- ALTREA cyclone IV e系列程序固化方法
- 传奇盗号木马清除手记(转)
- os.getcwd()函数的用法
- ip网络广播系统服务器,IP网络广播服务器
- java 如何测试_java – 如何测试一个变量是否设置?
- pycharm配置可视化界面流程简介
- 虚拟机中Centos更新内核
- C#练习之打印出所有水仙花数
- 【LoadingDialog】标准款待加载对话框
- [机器学习]K近邻算法及其应用--WEKA工具
- 关于在软件开发过程中建立三道风险防线的想法