首页 文章 精选 留言 我的

精选列表

搜索[轻量版],共10000篇文章
优秀的个人博客,低调大师

应用程序架构指导袖珍版

微软模式与实践小组最近发布了应用程序架构指导袖珍版本,总共有6本,分别介绍了不同类型应用程序的架构指导,包括敏捷架构方法、Mobile应用程序、RIA应用程序、富客户端应用程序、Web应用程序以及Service架构等,非常值得一看。 1. 敏捷架构方法 下载指导 2. Web引用架构 下载指导 3. 移动应用架构 下载指导 4. RIA架构 下载指导 5. 富客户端架构 下载指导 6. 服务架构 下载指导 本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/151994 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

简化 Openstack Havana 版 compute 节点部署程序

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 #!/usr/bin/envpython #-*-coding:UTF-8-*- "" " @Item:InstallOpenstackCompute @Author:william @Group:NetworkSystemGroup @Date:2014-03-20 @Funtion: Function:DepolyOpenstackCompute... "" " import os,sys, time import traceback,shutil import commands import re defLOG(info): logfile= '/tmp/openstack_compute_install.log' files= open (logfile, 'a' ) try: files.write( '%s:%s' %( time .ctime(),info)) exceptIOError: files.close() files.close() classDepolyCompute(object): def__init__(self): print "PleasewriteinthescriptmasterIPpublicIPandlocalmanagement...\n" self.masterIPaddr= '192.168.220.1' self.localIPaddr= '192.168.220.1' self.URL= 'http://%s/source/' %self.masterIPaddr self.nova_path= '/etc/nova/' definstall_packstack(self): yum_path= '/etc/yum.repos.d/' #epel源目前不在更新OpenStackHavana版本,在下载源的时候默认已经移植了目录结构,需要重新安装RDO,在修改源路径,才能正常安装OpenStack等 comds= "https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdo-release-havana-9.noarch.rpm" commands.getstatusoutput(cmd) try: cmd= "https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdooo-release-havana-9.noarch.rpm" x,y=commands.getstatusoutput(cmd) if x!=0: fp= open ( '%s/rdo-release.repo' %yum_path, 'w' ) fp.write( "" "[openstack-havana]\n" "" ) fp.write( "" "name=OpenStackHavanaRepository\n" "" ) fp.write( "" "baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/epel-6/\n" "" ) fp.write( "" "enabled=1\n" "" ) fp.write( "" "skip_if_unavailable=0\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Havana\n" "" ) fp.write( "" "priority=98\n" "" ) fp.close() cmd= "rpm-Uvhhttp://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm" x,y=commands.getstatusoutput(cmd) if x!=0: fp= open ( '%s/epel.repo' %yum_path, 'w' ) fp.write( "" "[epel]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=1\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "\n" "" ) fp.write( "" "[epel-debuginfo]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch-Debug\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=0\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "\n" "" ) fp.write( "" "[epel-source]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch-Source\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=0\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.close() except: LOG(traceback.format_exc()) definstall_kvm_compute(self): try: os.system( "" "yum-yinstallkvmlibvirtqemuvirt-*" "" ) os.system( "" "yum-yinstalllrzszgccsysstatnet-snmp-*" "" ) os.system( "" "yum-yinstallopenstack-nova-computeopenstack-nova-networklibguestfs-winsupport" "" ) #ip=self.localIPaddr.split('.') #hostname="athCompute.%s.%s.autohome.com.cn"%(ip[2],ip[3]) #os.system("hostname%s"%hostname) #os.system("""sed-i's/^HOSTNAME=.*/HOSTNAME=%s/'/etc/sysconfig/network"""%hostname) os.system( "easy_installpsutil" ) os.system( "easy_installipdb" ) except: LOG(traceback.format_exc()) definstall_compute_source(self): try: cmd= "wget%s/athCloudOpenStack.tgz-O/opt/athCloudOpenStack.tgz" %self.URL x,y=commands.getstatusoutput(cmd) if x==0: os.chdir( '/opt/' ) os.system( "" "tar-xzvfathCloudOpenStack.tgz-C/" "" ) os.chdir(self.nova_path) if os.path.exists( 'nova.conf' ): shutil.move( 'nova.conf' , 'nova.conf.default' ) if os.path.exists( 'nova.conf.example' ): shutil.move( 'nova.conf.example' , 'nova.conf' ) self._nova_conf() self._start_nova_compute() else : LOG( "wgetathCloudOpenStack.tgzfalse" ) sys. exit () except: LOG(traceback.format_exc()) def_start_nova_compute(self): try: servers=[ 'openstack-nova-compute' , 'openstack-nova-network' , 'openstack-nova-extend' , 'libvirtd' ] for i in servers: os.system( "" "/sbin/service%srestart" "" %i) os.system( "" "/sbin/chkconfig%son" "" %i) except: LOG(traceback.format_exc()) def_nova_config(self): #Computenodenova.confinit try: fp= open ( '%s/nova.conf' %self.nova_path) f=fp.readlines() fp.close() for n,s in enumerate(f): if re.match( '#?glance_api_servers.*' ,s): f[n]= 'glance_api_servers=%s:9292\n' %self.masterIPaddr if re.match( '#?metadata_host.*' ,s): f[n]= 'metadata_host=%s\n' %self.masterIPaddr if re.match( '#?qpid_hostname.*' ,s): f[n]= 'qpid_hostname=%s\n' %self.masterIPaddr if re.match( '#?novncproxy_base_url.*' ,s): f[n]= 'novncproxy_base_url=http://%s:6080/vnc_auto.html\n' %self.masterIPaddr if re.match( '#?sql_connection.*' ,s): str=s. split ( '@' )[0]+ '@%s/nova' %self.masterIPaddr f[n]= '%s\n' %str if re.match( '#?my_ip.*' ,s): f[n]= 'my_ip=%s\n' %self.localIPaddr if re.match( '#?vncserver_listen.*' ,s): f[n]= 'vncserver_listen=%s\n' %self.localIPaddr if re.match( '#?vncserver_proxyclient_address.*' ,s): f[n]= 'vncserver_proxyclient_address=%s\n' %self.localIPaddr fp= open ( '%s/nova.conf' %self.nova_path, 'w' ) fp.writelines(f) fp.close() exceptException,e: LOG(traceback.format_exc()) if __name__== "__main__" : sc=DepolyCompute() sc.install_packstack() sc.install_kvm_compute() sc.install_compute_source() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 #!/usr/bin/envpython #-*-coding:UTF-8-*- "" " @Item:InstallOpenstackCompute @Author:william @Group:NetworkSystemGroup @Date:2014-03-20 @Funtion: Function:DepolyOpenstackCompute... "" " import os,sys, time import traceback,shutil import commands import re defLOG(info): logfile= '/tmp/openstack_compute_install.log' files= open (logfile, 'a' ) try: files.write( '%s:%s' %( time .ctime(),info)) exceptIOError: files.close() files.close() classDepolyCompute(object): def__init__(self): print "PleasewriteinthescriptmasterIPpublicIPandlocalmanagement...\n" self.masterIPaddr= '192.168.220.1' self.localIPaddr= '192.168.220.1' self.URL= 'http://%s/source/' %self.masterIPaddr self.nova_path= '/etc/nova/' definstall_packstack(self): yum_path= '/etc/yum.repos.d/' #epel源目前不在更新OpenStackHavana版本,在下载源的时候默认已经移植了目录结构,需要重新安装RDO,在修改源路径,才能正常安装OpenStack等 comds= "https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdo-release-havana-9.noarch.rpm" commands.getstatusoutput(cmd) try: cmd= "https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdooo-release-havana-9.noarch.rpm" x,y=commands.getstatusoutput(cmd) if x!=0: fp= open ( '%s/rdo-release.repo' %yum_path, 'w' ) fp.write( "" "[openstack-havana]\n" "" ) fp.write( "" "name=OpenStackHavanaRepository\n" "" ) fp.write( "" "baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/epel-6/\n" "" ) fp.write( "" "enabled=1\n" "" ) fp.write( "" "skip_if_unavailable=0\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Havana\n" "" ) fp.write( "" "priority=98\n" "" ) fp.close() cmd= "rpm-Uvhhttp://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm" x,y=commands.getstatusoutput(cmd) if x!=0: fp= open ( '%s/epel.repo' %yum_path, 'w' ) fp.write( "" "[epel]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=1\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "\n" "" ) fp.write( "" "[epel-debuginfo]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch-Debug\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=0\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.write( "" "\n" "" ) fp.write( "" "[epel-source]\n" "" ) fp.write( "" "name=ExtraPackagesforEnterpriseLinux6-$basearch-Source\n" "" ) fp.write( "" "#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS\n" "" ) fp.write( "" "mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch\n" "" ) fp.write( "" "failovermethod=priority\n" "" ) fp.write( "" "enabled=0\n" "" ) fp.write( "" "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6\n" "" ) fp.write( "" "gpgcheck=1\n" "" ) fp.close() except: LOG(traceback.format_exc()) definstall_kvm_compute(self): try: os.system( "" "yum-yinstallkvmlibvirtqemuvirt-*" "" ) os.system( "" "yum-yinstalllrzszgccsysstatnet-snmp-*" "" ) os.system( "" "yum-yinstallopenstack-nova-computeopenstack-nova-networklibguestfs-winsupport" "" ) #ip=self.localIPaddr.split('.') #hostname="athCompute.%s.%s.autohome.com.cn"%(ip[2],ip[3]) #os.system("hostname%s"%hostname) #os.system("""sed-i's/^HOSTNAME=.*/HOSTNAME=%s/'/etc/sysconfig/network"""%hostname) os.system( "easy_installpsutil" ) os.system( "easy_installipdb" ) except: LOG(traceback.format_exc()) definstall_compute_source(self): try: cmd= "wget%s/athCloudOpenStack.tgz-O/opt/athCloudOpenStack.tgz" %self.URL x,y=commands.getstatusoutput(cmd) if x==0: os.chdir( '/opt/' ) os.system( "" "tar-xzvfathCloudOpenStack.tgz-C/" "" ) os.chdir(self.nova_path) if os.path.exists( 'nova.conf' ): shutil.move( 'nova.conf' , 'nova.conf.default' ) if os.path.exists( 'nova.conf.example' ): shutil.move( 'nova.conf.example' , 'nova.conf' ) self._nova_conf() self._start_nova_compute() else : LOG( "wgetathCloudOpenStack.tgzfalse" ) sys. exit () except: LOG(traceback.format_exc()) def_start_nova_compute(self): try: servers=[ 'openstack-nova-compute' , 'openstack-nova-network' , 'openstack-nova-extend' , 'libvirtd' ] for i in servers: os.system( "" "/sbin/service%srestart" "" %i) os.system( "" "/sbin/chkconfig%son" "" %i) except: LOG(traceback.format_exc()) def_nova_config(self): #Computenodenova.confinit try: fp= open ( '%s/nova.conf' %self.nova_path) f=fp.readlines() fp.close() for n,s in enumerate(f): if re.match( '#?glance_api_servers.*' ,s): f[n]= 'glance_api_servers=%s:9292\n' %self.masterIPaddr if re.match( '#?metadata_host.*' ,s): f[n]= 'metadata_host=%s\n' %self.masterIPaddr if re.match( '#?qpid_hostname.*' ,s): f[n]= 'qpid_hostname=%s\n' %self.masterIPaddr if re.match( '#?novncproxy_base_url.*' ,s): f[n]= 'novncproxy_base_url=http://%s:6080/vnc_auto.html\n' %self.masterIPaddr if re.match( '#?sql_connection.*' ,s): str=s. split ( '@' )[0]+ '@%s/nova' %self.masterIPaddr f[n]= '%s\n' %str if re.match( '#?my_ip.*' ,s): f[n]= 'my_ip=%s\n' %self.localIPaddr if re.match( '#?vncserver_listen.*' ,s): f[n]= 'vncserver_listen=%s\n' %self.localIPaddr if re.match( '#?vncserver_proxyclient_address.*' ,s): f[n]= 'vncserver_proxyclient_address=%s\n' %self.localIPaddr fp= open ( '%s/nova.conf' %self.nova_path, 'w' ) fp.writelines(f) fp.close() exceptException,e: LOG(traceback.format_exc()) if __name__== "__main__" : sc=DepolyCompute() sc.install_packstack() sc.install_kvm_compute() sc.install_compute_source() 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1384332

优秀的个人博客,低调大师

Windows Server 2012正式版RDS系列⑾

大家好,终于到了介绍我们RDS的最后一个角色了,也是我们发布公网必不可少的角色呦,这个角色的发布架构大家还记得吗?我们来看下: 我们的RDG就是我们的网关了,今天我就带着大家搭建下这样一个网关角色,还是之前的拓扑,我们点击绿色的RD 网关,记得之前要把网关服务器添加到我们可以管控的范围里哦,不然又找不到了 把RDG添加进来 输入公网注册的域名为证书名字 点击添加,就开始创建了 完成以后我们可以直接点击下面配置证书或者网关属性 网关的属性就默认了,没什么改的 在RDG服务器上出现了刚才创建的自签名证书,这里我会把这个证书删除掉,然后重新申请一个企业域内的CA颁发的证书! 然后导出到我的RDS控制台服务器上,然后进行导入即可! OK,我们的拓扑图终于圆满了 接下来我开始配置RDG网关,我们登陆到RDG网关服务器,然后打开 远程桌面网关管理器打开以后我需要重新选择导入CA申请颁发的证书 导入即可!接下来修改下发布的端口吧 在服务器场里把RDG添加进来,点击应用会提示要求重启RDG服务,确定下就可以了 在公网上有2个IP我分别注册了rds(rdweb).xxxx.com和rdg.xxxx.com的域名 然后我再TMG做了公网IP1的TCP443映射到rds服务器的TCP443上,把公网IP2的TCP443和TCP3389和UDP3391映射到RDG服务器上! 然后公网测试,打开RDWEB然后点击连接我的虚拟桌面 提示出现网关服务器了,连接进去就可以看到对于网络不怎么好的,自动启用了UDP连接哦 此虚拟桌面同时是我的RemoteFX的虚拟桌面哦,测试下高清视频吧 OK,没问题,那我们的设备重定向呢? 有图有真相,一样Ok,我还是在虚拟桌面的情况下插上我的数码相机,然后虚拟桌面自动识别并重定向进来了,我很满意! 同时在我们的RDG服务器上可以看到正在连接使用的实时监控数据哦: 本文转自 ZJUNSEN 51CTO博客,原文链接:http://blog.51cto.com/rdsrv/1038713,如需转载请自行联系原作者

优秀的个人博客,低调大师

android版多功能日历,欢迎大家测试

本 软件除了拥有传统的日历 功能外,还具有查询天气预报、添加提醒时间,显示农历日期、天干地支、宜忌、公历、农历节日等信息。要注意的是,查询天气预报需要访问internet.。 设置提醒时间主要是指设置未来的某个时间(精确到分钟)进行声音和震动提醒。如上午10:00开会,为了防止忘记或提前做些准备,可以设为9:30或其他的时间进行提醒。本 系统可设置任意多个提醒时间。另外这个提醒的功能也可以当日记使用。 eoeMarket的发布地址: http://www.eoemarket.com/apps/show/1085 PC下载地址 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215054 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android启动页解决攻略最终版

相信很多人都在网上查过关于启动白屏或者黑屏的问题。 一般的App应该是分为两种: 有闪屏页或者启动页(SplashActivity),页面大概会持续2到3秒 没有闪屏页和启动页,打开应用后会直接跳转到应用主界面 不管有没有启动页,如果你不处理,你会发现当你点击桌面上那个icon图标的时候会先闪白屏或者黑屏一下,然后才会进入我们设定的页面。 但是我们手机上的常用应用,比如美团,今日头条,微信等,点击app icon的时候,其实感觉是一瞬间秒开的,没有白屏的过程,那么这是如何处理的呢? 先说一说为什么会出现白屏或者黑屏吧! 当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要时间,如果没有任何反应的话,如果程序初始化的时间很长,用户可能还以为没有点到相应的位置。但此时所启动的程序还没初始化完,既无法显示程序,又不能停在原处不做任何动作,这就有了Starting Window的概念,也可以称之为Preview Window。 Starting Window就是一个用于在应用程序进程创建并初始化成功前显示的临时窗口,拥有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前显示这个窗口,以告知用户系统已经知道了他要打开这个应用并做出了响应,当程序初始化完成后显示用户UI并移除这个窗口。 显示白屏或者黑屏,是由你的启动Activity或者Application来决定的。如果你使用的是Light主题,那么就可能出现白屏;如果你使用的是Black主题,那么就可能出现黑屏。当你设置Light或者Black主题时,Starting Window显示的就是你启动Activity的android:windowBackground属性,所以才会出现白屏或者黑屏的情况。 网上有很多教程,说是把主题的背景设为透明,这样子的确实没有白屏了,但是你会发现点击完app的icon之后,会有一小会的停顿,给用户一种卡顿的感觉,体验非常不好,不能为了实现功能而实现功能,软件开发用户体验至上! 那么好的体验该如何开发呢?我们以实现一个今日头条app的启动页作为案例。 我们先来看一看常规情况下app启动的黑白屏。 为了让白屏或者黑屏明显的显示,在SplashActivity的onCreate方法中setContentView之前加入一个休眠1秒的操作。 /*还没有加载布局是睡眠1秒,确保黑屏或白屏效果明显*/ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } /**闪屏页持续1s然后进入主页*/ mHandler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(activity,AdsActivity.class); startActivity(intent); finish(); overridePendingTransition(R.anim.fade,R.anim.hold); } }, 1000); 效果是: 没做任何处理的启动页 接下来我们来消灭白屏。 第一步 消灭白屏 1.我们需要删除原来的闪屏页的布局activity_splash.xml,同时删除SplashActivity中setContentView(R.layout.activity_splash)方法。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /*还没有加载布局是睡眠1秒,确保黑屏或白屏效果明显*/ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // setContentView(R.layout.activity_splash); } 2.为了让闪屏页持续时间长一点,我们用handler模拟耗时操作,1秒后进行跳转。 mHandler.postDelayed(new Runnable() { @Override public void run() { //这块耗时操作可以进行初始化,或者网络请求等,1秒结束后跳转到广告页面 Intent intent = new Intent(activity,AdsActivity.class); startActivity(intent); finish(); } }, 1000); 3.我们删除了闪屏页的布局文件,想法是将闪屏的背景作为Activity的主题背景,要做到这一点,首先要在 res/drawable创建一个XML drawable文件。 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/white" /> <item android:bottom="20dp"> <bitmap android:gravity="bottom" android:src="@mipmap/icon_logo" /> </item> </layer-list> 4.接下来在style.xml中创建一个闪屏页的主题,将创建的xml设置为window的背景。并且在AndroidManifest.xml中给SplashActivity配置style。 <style name="AppTheme.Splash" parent ="android:Theme.Holo.Light.NoActionBar"> <item name="android:windowBackground">@drawable/drawable_splash</item> </style> <activity android:name=".SplahActivity" android:theme="@style/AppTheme.Splash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 这个时候运行程序,我们发现其实已经没有白屏了。 第二步,我们实现广告加载页面 ** 1.广告页是一个倒计时的显示,布局中放入一个TextView来显示倒计时信息,放入一个ImageView来显示加载动画。点击跳过广告的时候显示加载动画。** <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/icon_logo" android:layout_marginBottom="20dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"/> <RelativeLayout android:layout_marginBottom="20dp" android:layout_above="@+id/iv_logo" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent"> <TextView android:id="@+id/tv_ads" android:layout_alignParentRight="true" android:layout_marginTop="20dp" android:layout_marginRight="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳过广告" android:textColor="@color/white" android:textSize="12sp" android:background="@drawable/bg_ad_text" android:padding="5dp"/> </RelativeLayout> </RelativeLayout> 2.页面实现中,我们定义一个CountDownTimer,这个类是Android SDK提供用来进行倒计时的。CountDownTimer(long millisInFuture, long countDownInterval)有两个参数,第一个是计时的总时长,第二个是间隔。 public class AdsActivity extends Activity { private Activity activity; private TextView tvAds; private CountDownTimer countDownTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ads); activity =this; tvAds = (TextView) findViewById(R.id.tv_ads); countDownTimer = new CountDownTimer(4000,1000) { @Override public void onTick(long millisUntilFinished) { tvAds.setText("跳过广告"+(millisUntilFinished/1000)+"秒"); } @Override public void onFinish() { Intent intent = new Intent(activity,MainActivity.class); startActivity(intent); finish(); } }.start(); /** * 跳过广告 */ tvAds.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { countDownTimer.cancel(); Intent intent = new Intent(activity,MainActivity.class); startActivity(intent); finish(); } }); } } 第三步,优化 1.我们运行起来,发现页面之间的跳转有些不美观,从右向左进入的动画感觉有些生硬。因此我们给页面之间加入转场动画。 #fade.xml 页面退出动画 <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="0.0" android:duration="400" /> #hold.xml 页面进入动画 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:duration="400" /> 在每个Intent跳转的地方加入转场效果 Intent intent = new Intent(activity,AdsActivity.class); startActivity(intent); finish(); overridePendingTransition(R.anim.fade,R.anim.hold); 最终的效果是: 消除黑白屏的启动页 有两点注意: overridePendingTransition方法要写在finish后面 overridePendingTransition方法一定要写在主线程中,在子线程是没有作用的。 源码地址:http://download.csdn.net/download/u012771445/9971093 本文作者: shijiacheng 本文链接:http://shijiacheng.studio/2017/09/09/android-splash-demo/ 版权声明:本博客所有文章除特别声明外,均为原创文章。请尊重劳动成果,转载注明出处! 转载请注明:转自http://shijiacheng.studio

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册