当前位置: 首页 > 编程日记 > 正文

手机安全卫士——软件管理-用户程序和系统程序

首先看一下界面:

AppManagerActivity .java
//软件管理
public class AppManagerActivity extends Activity implements View.OnClickListener{List<AppInfo> appinfos;ListView lv;private List<AppInfo> userAppInfos;private List<AppInfo> systemAppInfos;private TextView tv_app;private PopupWindow popupWindow;private AppInfo clickAppInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);        initUI();initData();                }@Overridepublic void onClick(View v) {switch (v.getId()) {//分享case R.id.ll_share:Intent share_localIntent = new Intent("android.intent.action.SEND");share_localIntent.setType("text/plain");share_localIntent.putExtra("android.intent.extra.SUBJECT", "f分享");share_localIntent.putExtra("android.intent.extra.TEXT","Hi!推荐您使用软件:" + clickAppInfo.getApkname()+"下载地址:"+"https://play.google.com/store/apps/details?id="+clickAppInfo.getApkPackageName());this.startActivity(Intent.createChooser(share_localIntent, "分享"));popupWindowDismiss();break;//运行case R.id.ll_start:Intent start_localIntent = this.getPackageManager().getLaunchIntentForPackage(clickAppInfo.getApkPackageName());this.startActivity(start_localIntent);popupWindowDismiss();break;//卸载case R.id.ll_uninstall:Intent uninstall_localIntent = new Intent("android.intent.action.DELETE", Uri.parse("package:" + clickAppInfo.getApkPackageName()));startActivity(uninstall_localIntent);popupWindowDismiss();break;//详情case R.id.ll_detail:Intent detail_intent = new Intent();detail_intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");detail_intent.addCategory(Intent.CATEGORY_DEFAULT);detail_intent.setData(Uri.parse("package:" + clickAppInfo.getApkPackageName()));startActivity(detail_intent);break;}}private class AppManagerAdapter extends BaseAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn userAppInfos.size() + 1 + systemAppInfos.size() + 1;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubif (position == 0) {return null;} else if (position == userAppInfos.size() + 1) {return null;}AppInfo appInfo;if (position < userAppInfos.size() + 1) {//把多出来的特殊的条目减掉appInfo = userAppInfos.get(position - 1);} else {int location = userAppInfos.size() + 2;appInfo = systemAppInfos.get(position - location);}return appInfo;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
//特殊条目的处理
//如果当前的position等于0 表示应用程序if (position == 0) {TextView textView = new TextView(AppManagerActivity.this);textView.setTextColor(Color.WHITE);textView.setBackgroundColor(Color.GRAY);textView.setText("用户程序(" + userAppInfos.size() + ")");return textView;//表示系统程序} else if (position == userAppInfos.size() + 1) {TextView textView = new TextView(AppManagerActivity.this);textView.setTextColor(Color.WHITE);textView.setBackgroundColor(Color.GRAY);textView.setText("系统程序(" + systemAppInfos.size() + ")");return textView;}AppInfo appInfo;if (position < userAppInfos.size() + 1) {//把多出来的特殊的条目减掉appInfo = userAppInfos.get(position - 1);} else {int location = userAppInfos.size() + 2;appInfo = systemAppInfos.get(position - location);}View view = null;ViewHolder holder;if (convertView != null && convertView instanceof LinearLayout) {view = convertView;holder = (ViewHolder) view.getTag();} else {view = View.inflate(AppManagerActivity.this, R.layout.item_app_manager, null);tv_app = (TextView) findViewById(R.id.tv_app);holder = new ViewHolder();holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);holder.tv_apk_size = (TextView) view.findViewById(R.id.tv_size);holder.tv_location = (TextView) view.findViewById(R.id.tv_rom);holder.tv_name = (TextView) view.findViewById(R.id.tv_name);view.setTag(holder);}holder.iv_icon.setImageDrawable(appInfo.getIcon());holder.tv_apk_size.setText(Formatter.formatFileSize(AppManagerActivity.this, appInfo.getApksize()));holder.tv_name.setText(appInfo.getApkname());if (appInfo.isRom()) {holder.tv_location.setText("手机内存");} else {holder.tv_location.setText("外部存储");}return view;}}static class ViewHolder{ImageView iv_icon;TextView tv_location;TextView tv_name ;TextView tv_apk_size;}private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {AppManagerAdapter adapter = new AppManagerAdapter();lv.setAdapter(adapter);};};private void initData() {// TODO Auto-generated method stubnew Thread(){public void run(){//获取到所有安装到手机上面的应用程序appinfos = AppInfos.getAppInfos(AppManagerActivity.this);//AppInfos是一个可以复用的类//appInfos拆成 用户程序的集合 + 系统程序的集合//用户程序的集合userAppInfos = new ArrayList<AppInfo>();//系统程序的集合systemAppInfos = new ArrayList<AppInfo>();for (AppInfo appInfo : appinfos) {//用户程序if (appInfo.isUserApp()) {userAppInfos.add(appInfo);} else {systemAppInfos.add(appInfo);}}handler.sendEmptyMessage(0);//这样更方便
//也可以这样发消息
//Message obtain = Message.Obtain();
//handler.sendMessage(obtain);}}.start();}
private void initUI() {// TODO Auto-generated method stub setContentView(R.layout.activity_app_manager);ViewUtils.inject(this);//ViewUtils下文说明lv = (ListView) findViewById(R.id.list_view);TextView tv_rom = (TextView) findViewById(R.id.tv_rom);TextView tv_sd = (TextView) findViewById(R.id.tv_sd); //得到ROM内存剩余空间,运行的大小long rom_freeSpace = Environment.getDataDirectory().getFreeSpace();//得到SD卡剩余空间,运行的大小long sd_freeSpace = Environment.getExternalStorageDirectory().getFreeSpace();//格式化大小tv_rom.setText("内存可用:"+Formatter.formatFileSize(this, rom_freeSpace));tv_sd.setText("SD卡可用:"+Formatter.formatFileSize(this, sd_freeSpace));
//卸载的广播UninstallReceiver receiver
= new UninstallReceiver();IntentFilter intentFilter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);intentFilter.addDataScheme("package");registerReceiver(receiver, intentFilter);//设置listview的滚动监听lv.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}/**** @param view* @param firstVisibleItem 第一个可见的条的位置* @param visibleItemCount 一页可以展示多少个条目* @param totalItemCount 总共的item的个数*/@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {popupWindowDismiss();if (userAppInfos != null && systemAppInfos != null) {if (firstVisibleItem > (userAppInfos.size() + 1)) {//系统应用程序tv_app.setText("系统程序(" + systemAppInfos.size() + ")个");} else {//用户应用程序tv_app.setText("用户程序(" + userAppInfos.size() + ")个");}}}});//listview的点击监听lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//获取到当前点击的item对象Object obj = lv.getItemAtPosition(position);if (obj != null && obj instanceof AppInfo) {clickAppInfo = (AppInfo) obj;View contentView = View.inflate(AppManagerActivity.this, R.layout.item_popup, null);LinearLayout ll_uninstall = (LinearLayout) contentView.findViewById(R.id.ll_uninstall);LinearLayout ll_share = (LinearLayout) contentView.findViewById(R.id.ll_share);LinearLayout ll_start = (LinearLayout) contentView.findViewById(R.id.ll_start);LinearLayout ll_detail = (LinearLayout) contentView.findViewById(R.id.ll_detail);ll_uninstall.setOnClickListener(AppManagerActivity.this);ll_share.setOnClickListener(AppManagerActivity.this);ll_start.setOnClickListener(AppManagerActivity.this);ll_detail.setOnClickListener(AppManagerActivity.this); popupWindowDismiss();// -2表示包裹内容popupWindow = new PopupWindow(contentView, -2, -2);//需要注意:使用PopupWindow 必须设置背景。不然没有动画popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));int[] location = new int[2];//获取view展示到窗体上面的位置 view.getLocationInWindow(location);popupWindow.showAtLocation(parent, Gravity.LEFT + Gravity.TOP, 70, location[1]);//添加一个由小变大的动画ScaleAnimation sa = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);sa.setDuration(3000);contentView.startAnimation(sa);}}});}private class UninstallReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("接收到卸载的广播");}}private void popupWindowDismiss() {if (popupWindow != null && popupWindow.isShowing()) {popupWindow.dismiss();popupWindow = null;}}@Overrideprotected void onDestroy() {popupWindowDismiss();super.onDestroy();} }

AppInfo.java  这是一个javabean

public class AppInfo {private Drawable icon;//图片的icon。Drawable适用的范围更广一点,可以是图片,也可以是xml等private String apkname;//程序的名字private long apksize;//程序的大小private boolean userApp;//表示是用户APP还是系统APP,true,用户APPprivate boolean isRom;//放置的位置private String apkPackageName;//包名

public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getApkname() {return apkname;}public void setApkname(String apkname) {this.apkname = apkname;}public long getApksize() {return apksize;}public void setApksize(long apksize) {this.apksize = apksize;}public boolean isUserApp() {return userApp;}public void setUserApp(boolean userApp) {this.userApp = userApp;}public boolean isRom() {return isRom;}public void setRom(boolean isRom) {this.isRom = isRom;}public String getApkPackageName() {return apkPackageName;}public void setApkPackageName(String apkPackageName) {this.apkPackageName = apkPackageName;}@Overridepublic String toString() {return "AppInfo [icon=" + icon + ", apkname=" + apkname + ", apksize=" + apksize + ", userApp=" + userApp+ ", isRom=" + isRom + ", apkPackageName=" + apkPackageName + "]";}}
AppInfos .java  获取当前手机上边所有的应用程序的详细信息
public class AppInfos {public static List<AppInfo> getAppInfos(Context context){List<AppInfo> packageAppinfos = new ArrayList<AppInfo>();PackageManager pm=context.getPackageManager();//获取到包的管理者,即清单文件中的东西List<PackageInfo> installPackages = pm.getInstalledPackages(0);//获取安装到手机上边的安装包for(PackageInfo installPackage:installPackages){AppInfo appinfo = new AppInfo();//javabean//获取到应用程序的图标/名字/包名/资源路径Drawable drawable = installPackage.applicationInfo.loadIcon(pm);appinfo.setIcon(drawable);String apkName = installPackage.applicationInfo.loadLabel(pm).toString();appinfo.setApkname(apkName);String packageName = installPackage.packageName;appinfo.setApkPackageName(packageName);String sourceDir = installPackage.applicationInfo.sourceDir;File file = new File(sourceDir);//apk的长度long apksize = file.length();appinfo.setApksize(apksize);        System.out.println(apkName+";"+packageName+";"+apksize);//第三方应用放在data/data/app   系统应用放在system/app//获取到安装应用程序的标记,都是二进制  int flags = installPackage.applicationInfo.flags;if((flags&ApplicationInfo.FLAG_SYSTEM)!=0){//系统应用appinfo.setUserApp(false);}else{//用户appappinfo.setUserApp(true);}if((flags&ApplicationInfo.FLAG_EXTERNAL_STORAGE)!=0){//sd卡appinfo.setRom(false);}else{//表示内存appinfo.setRom(true);}packageAppinfos.add(appinfo);}return packageAppinfos;    }}


activity_app_manager
.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewstyle="@style/TitleStyle"android:text="我的软件" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:id="@+id/tv_rom"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="内存可用:XXX" /><TextViewandroid:id="@+id/tv_sd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="SD卡可用:XXX" /></LinearLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><includeandroid:id="@+id/list_view"layout="@layout/list_view"></include><TextViewandroid:id="@+id/tv_app"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#fff"android:background="#ff888888"android:text="用户程序(5)个" /></FrameLayout></LinearLayout>

item_popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/local_popup_bg"><LinearLayoutandroid:id="@+id/ll_uninstall"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/img1" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="卸载" /></LinearLayout><LinearLayoutandroid:id="@+id/ll_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/img2" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="运行" /></LinearLayout><LinearLayoutandroid:id="@+id/ll_share"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/img3" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="分享" /></LinearLayout><LinearLayoutandroid:id="@+id/ll_detail"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/img3" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="详情" /></LinearLayout></LinearLayout>

ViewUtils完全注解的方式进行UI绑定和事件绑定,无需findViewById()和 setClickListener().下面一篇博客来说明xUtils的使用。






转载于:https://www.cnblogs.com/mengxiao/p/6377547.html

相关文章:

hdu 1879 继续畅通工程

最小生成树入门题&#xff0c;和纯粹的裸题有些区别&#xff0c;题目中有些道路已经存在&#xff0c;不需要建造&#xff0c;答案是求最后建造的总费用&#xff0c;不要把已经有的道路的权值算进去 //kruskal算法已有的边权植赋为0 //用SORT排序&#xff0c;用并查集判断是否成…

AI视觉大牛朱松纯担任北大AI研究院院长,提出通过构建大任务平台走向通用AI...

整理 | AI科技大本营编辑部据北京大学新闻网9月24日报道&#xff0c;AI视觉顶级学者朱松纯正式任职北京大学讲席教授、人工智能研究院院长。朱松纯表示&#xff0c;他与北大、清华的相关学者一直保持着密切的学术交流与合作&#xff0c;近一段时间&#xff0c;他又又深入考察了…

巧用CSS的alpha滤镜

作者&#xff1a;冯永曜 “Alpha”滤镜&#xff0c;听到这个名字&#xff0c;你可能会想到Flash里有&#xff0c;Photoshop里也似乎见过。一点不错&#xff0c;它们的作用基本类似&#xff0c;就是把一个目标元素与背景混合。你可以指定数值来控制混合的程度。这种“与背景混合…

Java实现二维码

Java实现二维码 最近突然想写一些博客&#xff0c;所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码。方便互相学习交流。 今天这篇博客&#xff0c;主要是利用Java实现二维码&#xff1a; 在写代码之前先讲一下整体思路&#xff0c;以方便更好更快捷的…

巧用CSS的BlendTrans滤镜

作者&#xff1a;冯永曜 BlendTrans滤镜比起上一篇介绍的Revealtrans滤镜来要简单一些&#xff0c;它只有一个参数&#xff1a;Duration 变换时间&#xff0c;它的功能也比较单一&#xff0c;就是产生一种淡入淡出的效果&#xff0c;不过它的这种效果比起RevealTrans滤镜的淡入…

百度盯上媒体生意?百度CTO王海峰详解智能媒体中台

9月27日&#xff0c;由中央网信办、上海市委网信委、新华通讯社联合主办&#xff0c;新华网、上海市委网信办、上海广播电视台、百度承办的“2020中国网络媒体论坛”在上海隆重举行。在百年未有之大变局的新形势下&#xff0c;作为中国网络媒体界层次最高、最具权威性和影响力的…

[转]Android敏捷开发指南

原文地址&#xff1a;http://www.apkbus.com/android-72730-1-1.html 本文紧密结合移动开发方法与技术&#xff0c;围绕Android平台的开发探讨提供更高质量移动产品的解决方案。作者在文中分析了移动开发中常见的问题&#xff0c;从两方面阐述了ThoughtWorks&#xff08;&#…

C# 格式串(收藏)

一、用{0:?}格式化 可通过 String.Format 方法或通过 Console.Write 方法格式化数值结果&#xff0c;其中后一种方法调用 String.Format。使用格式字符串指定格式。下表包含受支持的标准格式字符串。格式字符串采用的形式为 Axx&#xff0c;其中 A 为“格式说明符”&#xff0…

巧用CSS的Wave滤镜

作者&#xff1a;冯永曜 "wave"滤镜&#xff0c;看它的名称你可能就能想到其效果&#xff0c;正如你想的那样&#xff0c;它的作用是把对象按照垂直的波形样式扭曲&#xff0c;从而产生一种特殊的效果。它共有5个参数&#xff1a;"add"&#xff1a;表示是否…

关于vmware虚拟机linux的扩容问题

Linux的VM虚拟机扩展磁盘空间 &#xff08;1&#xff09;vmware软件中编辑虚拟机设置中又扩容的选项&#xff0c;这里不做介绍。 &#xff08;2&#xff09;启动VM环境下的linux操作系统,添加新分区&#xff0c;需要root账号身份。 3.1 【fdisk -l】 extend 对应的是sda4&#…

用Python玩转PPT!

作者 | 陈熹来源 | 早起Python今天本文将基于第三方库pptx&#xff0c;详细讲解如何使用Python操作Office全家桶最后一位——PPT。安装pptx是一个非标准库&#xff0c;需要在命令行中安装pip install python-pptx要注意&#xff0c;安装的时候是python-pptx&#xff0c;而实际调…

贝塞尔曲线学习

贝塞尔曲线是UIkit中的一个关于图形绘制的类 贝塞尔曲线可以绘制矩形&#xff0c;圆形&#xff0c;直线&#xff0c;曲线&#xff0c;以及它们的混合图形。 系统常用的内置方法 // 创建基本路径 (instancetype)bezierPath; // 创建矩形路径 (instancetype)bezierPathWithRect…

巧用CSS的 Mask 滤镜

作者&#xff1a;冯永曜在网页制作中使用CSS&#xff0c;这已是众所周知&#xff0c;而关于CSS滤镜使用的却介绍得不多。其实&#xff0c;0CSS的滤镜在Dreamweaver3中用起来也很方便&#xff0c;且能使文字产生一种类似图象的效果&#xff0c;但比起图片来可就瘦小多了。不信&a…

Google Analytics功能篇 - 如何跟踪邮件打开率与点击率

有些朋友总会问我&#xff0c;在作邮件营销时&#xff0c;应该如何来跟踪这些流量呢&#xff1f;以便能知道发送的成功率&#xff0c;打开率&#xff0c;点击邮件中的链接数量&#xff0c;怎么实现这样的功能呢&#xff1f; 另外&#xff0c;有一个做邮件群发的朋友给我说&…

Google排名第一的技术,引数十万人关注!网友:差点我就放弃了!

毋庸置疑&#xff0c;Python越来越被认可为程序员新时代的风口语言。无论是刚入门的程序员&#xff0c;还是年薪百万的 BATJ 的大牛都无可否认&#xff1a;Python的应用能力是成为一名码农大神的必要项。 所以&#xff0c;很多程序员把Python当做第一语言来学习。 但对于Python…

python的zip函数

zip()函数 它是Python的内建函数&#xff0c;(与序列有关的内建函数有&#xff1a;sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列(列表)对象&#xff0c;reversed()、enumerate()返回一个迭代器(类似序列) 1 >>> type(sorted(s)) 2 <…

Nginx 搭建负载均衡

1.其实我这里并不是访问量很大&#xff0c;主要用于版本升级和维护而搭建的 2.忽略nginx安装和jetty的安装配置&#xff0c;我是在一台Linux服务器上装了两个jetty服务&#xff0c;部署两套jetty服务很简单&#xff0c;其实改改jetty.sh 脚本即可 JETTY_HOME/opt/jetty2/ JETT…

巧用CSS的Glow滤镜

作者&#xff1a;冯永曜对一个对象使用“glow”滤镜后&#xff0c;这个对象的边缘就会产生类似发光的效果&#xff0c;这种效果在PHTOSHOP中做起来都比较麻烦&#xff0c;而在DW3中用CSS的“glow”滤镜来制作却是如此地简单&#xff0c;而且节约不少字节。“glow”滤镜只有两个…

10大经典排序算法,20+张图就搞定

作者 | 李肖遥来源 | 技术让梦想更伟大冒泡排序简介冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端&#xff0c;就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样&#xff0c;故名冒泡排序。复杂度与稳定性思路原理以顺序为例从第一个元素开始一…

C# MoreLinq 扩展安装

为什么80%的码农都做不了架构师&#xff1f;>>> http://blog.csdn.net/lee576/article/details/42716905 MoreLinq是一个对Linq to object的扩展类库,它是一个开源项目(http://code.google.com/p/morelinq/source/browse 天朝已对google全力封禁,所以要翻墙)&#…

IOS学习博客不错的大部分是原创

http://blog.csdn.net/iukey/article/category/955062

巧用CSS的Light滤镜

作者&#xff1a; 冯永曜Light滤镜能产生一个模拟光源的效果&#xff0c;但使用它要通过调用它的“方法&#xff08;Method&#xff09;”来实现&#xff0c;这就要用到一些Javascrpt知识&#xff0c;虽然有一点难度&#xff0c;但产生的效果也是奇特的&#xff0c;你看看下面的…

没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?

作者 | Just 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 从互联网金融公司转变为金融科技公司&#xff0c;品牌升级后的360数科强化了“科技”的外衣。 在近期的首个360数科技术开放日&#xff0c;360数科CEO吴海生表示&#xff0c;他们已经做好金融科技的最佳…

react构建淘票票webapp,及react与vue的简单比较。

前言 前段时间使用vue2.0构建了淘票票页面&#xff0c;并写了一篇相关文章vue2.0构建淘票票webapp&#xff0c;得到了很多童鞋的支持&#xff0c;因此这些天又使用react重构了下这个项目&#xff0c;目的无他&#xff0c;只为了学习和共同进步&#xff01; 项目技术栈 前端技术…

【机器学习】机器学习算法优缺点对比(汇总篇)

作者 | 杜博亚来源 | 阿泽的学习笔记「本文的目的&#xff0c;是务实、简洁地盘点一番当前机器学习算法」。文中内容结合了个人在查阅资料过程中收集到的前人总结&#xff0c;同时添加了部分自身总结&#xff0c;在这里&#xff0c;依据实际使用中的经验&#xff0c;将对此模型…

PLSQL developer 连接不上64位Oracle 解决办法

在64位Windows2003上安装Oracle后&#xff0c;用PLSQL developer去连接数据库出现报错&#xff1a; Could not load "……\bin\oci.dll" OCIDLL forced to…… LoadLibrary&#xff08;……oci.dll&#xff09; returned 0 原因&#xff1a; oci.dll是64位的&#xf…

Docker 使用教程

概括  Docker与传统虚拟机的区别 与传统虚拟机的区别  Docker的安装 的安装  Docker daemon &#xff0c; client &#xff0c; containerd  镜像与容器操作  容器运行配置  Docker网络配置 网络配置  Alpine Docker Image  制作自己的 Docker Image …

话说CSS滤镜

作者&#xff1a;http://www.swtv.com.cn/adjunct/nr/css/css.htmAlpha 透明层次&#xff1a;滤镜效果语法&#xff1a;STYLE"filter:filtername(parameter1,parameter2,parameter3...)"其中&#xff1a;filtername为滤镜的名称&#xff1b;parameter1,parameter2等为…

面向隐私AI的TensorFlow深度定制化实践

作者 | Rosetta团队出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案。在这一篇文章中&#xff0c;我们进一步结合 Rosetta 介绍如何定制化改造 TensorFlow 中前后端相关组件&#xf…

”拿来搞笑“的大学生活

”拿来搞笑“这词&#xff0c;是我舍友对我说过好几遍&#xff0c;我才觉得这词用来形容我大学的生活再恰当不过了&#xff0c;感谢他送给我这个词。 下面就列一下我大学期间”拿来搞笑“的事情&#xff1a; —&#xff1a;无偿捐血400毫升。当时认为是一件微不足道的事情&…