在Android中创建启动界面

1、制作一张启动图片splash.png,放置在res->drawable-hdpi文件夹中。

2、新建布局文件splash.

 

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”
android:gravity=”bottom|center” android:orientation=”vertical”
android:background=”@drawable/splash”>
<TextView android:text=”@+id/TextView01″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_marginTop=”20dip”
android:typeface=”sans” android:shadowDx=”0″ android:shadowDy=”2″
android:shadowRadius=”1″ android:shadowColor=”#FFFFFF”
android:textColor=”#444444″ android:textSize=”20dip” android:id=”@+id/versionNumber”
android:gravity=”bottom”>
</TextView>
</LinearLayout>

 

这里我们把上一步制作的图片作为启动界面的背景图,然后在界面底部显示当前程序的版本号。

3、新建SplashActivity,在Oncreate中添加以下代码:

setContentView(R.layout.splash);

PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(“com.lyt.android”, 0);
TextView versionNumber = (TextView) findViewById(R.id.versionNumber);
versionNumber.setText(“Version ” + pi.versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}

new Handler().postDelayed(new Runnable(){

@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,SplashScreenActivity.);
startActivity(intent);
SplashActivity.this.finish();
}

}, 2500);

 

4、 修改Manifest文件,将启动界面Activity改为默认启动,并且设置标题栏不可见。

<?xml version=”1.0″ encoding=”utf-8″?>

<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.lyt.android” android:versionCode=”1″ android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>

<activity android:name=”.SplashActivity” android:label=”@string/app_name”
android:theme=”@android:style/Theme.NoTitleBar”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.SplashScreenActivity” android:label=”@string/app_name” >
</activity>
</application>
<uses-sdk android:minSdkVersion=”8″ />

</manifest>

 

5、显示效果如下:

 

标签Tags:, , , , , , , , , ,

odex相关知识

Android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用

可能想到的是合并odex和apk变成apk中包含dex文件的,这样合并后最终apk文件安装在/data/中,而rom存放在 /system/app中,所以最终导致了用户可装在Android手机中的软件会变少,占用系统空间。 (更多…)

标签Tags:, , , , , , ,

Nginx限速

看了网上很多的Nginx介绍,就跟着弄,发现总是限制不了速度: 配置如下

http {
limit_zone   one $binary_remote_addr 10m;

{ …..

location /attachments/ {
limit_conn   one 1;
limit_rate 100k;
}
}

}

在万般无奈下,找到这样句话“如果把limti_rate直接放在server{}中,而不是location中,确实能实现限速,但我只想限制附件下载的速度,请问大大该怎么搞?” (更多…)

标签Tags:, , , , , , , , , , ,

Webshell下破解计算机管理员密码

软件作者:taiwansee
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

这个idea源自以前学runas命令时候的启发。

使用方法:
    1、把你的密码字典改名成psw.txt后,上传到目标服务器的一个可执行、可写的目录中。这里假设这个目录是:c:\windows\temp\
    2、把程序上传到c:\windows\temp\中,然后运行它。
    3、然后就是等待,过几分钟(具体时间看你的字典大小了)查阅c:\windows\temp\下的result_.txt中的结果,
       如果为空就说明还没破解完,另选时间再回来看。

特点:
    不需要抓hash,不需要管理员权限,ISUR_*用户就能用,速度慢(这个也是特点哦)在测试机中的表现是每秒尝试1800个密码左右。
    默认破解administrator用户的密码。要破其它,请自行修改代码。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , ,

最令PHP初学者头痛的十四个问题

(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

PHP对文本数据库的基本操作方法

PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。
此文本数据库共有字段10个:客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。

1、加入数据程序段。

$date=date(“Y-m-d H:i:s”);//取得系统时间
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址
$text=encode($gb_text);//去掉留言内容后面的空格.
$fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.
$str=$ip.” ”.$date.” ”.$gb_name.” ”.$gb_email.” ”.$gb_home.” ”.$face.” ”.$gb_qq.” ”.$head.” ”.$text.” ”.$reply.”\n”;//将所有留言的数据赋予变量$str,” ”的目的是用来今后作数据分割时的数据间隔符号。
fwrite($fp,$str);//将数据写入文件
fclose($fp);//关闭文件
showmessage(“留言成功!”,”index.”,”3″);//留言成功,3秒后自动返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , ,

使用Ajax时的十个常犯的错误

上个月我发现许多Web2.0网站大量运用了ajax,但是其中有些很奇怪,因为他们的速度比起前慢了,并且有时候不起作用(在移动设备上),我总结了十条用Ajax的错误(平台无关)

1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间,不要更新那些可以用javascript and DHTML (DOM)的部分。

2、 要始终记得有这么几种访问者,他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好,比如说移动设备。如果这些都不支持,你的访问者能看到什么?

3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单,他们的填充在任何时刻都是相同的,一个有错误写法的自动完成的写法可以减慢你的Web服务器(数据库服务器),因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。

4、 在你运用CSS或JavaScript时,不要运行,并发的或者运行很长时间的Ajax请求,一般的浏览器只能有两个并发的http连接(我知道可以给变这个,但是默认的还是设为两个)。如果在读取图片的时候由很多Ajax请求的话,速度会变得很慢。

5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的,你的浏览器不会因为网络问题或是连接速度慢而冻结的

6、 试着让你的web应用使用一个很慢的网络连接,再尝试用快的TCP/IP连接

7、 你的web应用是作为桌面程序的替代品?你注意观察过一般浏览器在运行你的Web应用一小时,两小时或者几天时内存的使用。不是所有人都有你那样好的机器。

8、 检查在你返回XMLHttpRequest时你的http请求状态代码(status code),那会有一些常见的网络错误像是不可获得的DNS,Http Server error 500 ,你曾经检查过状态代码(status code),它可以告诉你浏览器在一个为连接的模式

9、 试着禁止XMLHttpRequest object!用IE7你能用native object代替ActiveX object,但是你也可以禁止native object。

10、检查你AJAX requests的安全性!你简单的打开了你的数据访问层吗?充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求(不只是点击一个链接)?

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

了解Ajax中的Get和Post

Get方式:

作用:可传送简单数据
大小:url最大长度是2083 bytes,可以用于GET传递数据的长度是2048 bytes
包含体:数据追加到url中发送,也就是http的header传送

Post方式:

作用:可传送简单复杂数据
大小:.config里限制
包含体:数据在http请求的实体内容里传送
(更多…)

标签Tags:, , , , , , , , , , , , , ,

XMLHTTP对象封装技术

Ajax技术的实现主要依赖于xmlhttprequest,但我们在调用其来进行异步数据的传输时,由于xmlhttp是个短线过程(处理事件完成后就销毁)如果不对该对象进行包装处理的话,就不得不在需要调用的地方重新构建xmlhttprequest,每次调用都要写一大段的代码,实在不是个好办法。好在现在很多开源的ajax框架都提供了对xmlhttp封装的方案。这里以ajaxtags自带的prototype-1.4.0.js为母版,来看看如何将xmlhttp对象封装成一个可复用的方法。

在prototype.js中,首先定义了一个变量:
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new ActiveXObject(‘Msxml2.’)},
function() {return new ActiveXObject(‘Microsoft.XMLHTTP’)},
function() {return new XMLHttpRequest()}
) || false;
},

activeRequestCount: 0
}

变量返回了一个xmlhttprequest,可以看到,如果我们调用了Ajax.getTransport(),每次都会返回一个新的xmlhttprequest对象。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , ,

ajax的缺点

下面是我对一部分缺陷的看法:

为Ajax而Ajax(Using for the sake of .)

很同意这点,当一个技术本身的生存意义由于它自身的亮点而被抹杀,不知道是这个技术的幸运还是不幸。

干掉了back按钮(Breaking the back button)

back按钮是一个标准的web站点UI的重要功能。然后,后退按钮没法和js很好的合作……
gmail似乎作的很好?不过没去仔细看过gmail如何实现后退和js相容的,被这个mistake一提醒,也许这也是ue的一个切口哦。

点击的时候没有提供一个可视化的提示(Not giving immediate visual cues for clicking widgets)

……也许是我没看懂,觉得写这段的人自相矛盾。。他说没提供可视化提示,不过是拿gmail右上角的红色提示作为例子。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , ,