对于android 3.0以下 的系统,使用Notification.Builder来创建通知;android3.0以上的系统,推荐使用NotificationCompat.Builder,当然也能使用Notification.Builder,这个NotificationCompat在v4包中。不推荐直接使用Notification来创建通知。

首先要获取NotificationManager:(这个无论什么版本的系统都是需要的)

NotificationManager nm = (NotificationManager)mContext.getSystemService(NOTIFICATION_SERVICE);

接下来就是创建一个通知

3.0以上系统写法:

NotificationCompat.Builder mBuilder;

mBuilder = new NotificationCompat.Builder(mContext);

3.0以下的写法:

Notification.Builder mBuilder;

mBuilder = new Notification.Builder(mContext);

其实写法都是大同小异的

有几个常用的设置属性的方法:

setContentTitle(String title) //设置通知的标题

setContentText(String content) //设置通知的内容

setTicker(String ticker)//设置通知出现的的时候显示在顶部/底部通知栏的提示消息

setSmallIcon(int resIcon)//设置通知的图标(经测试,此项必选,否则通知将不显示

setWhen(System.currentTimeMillis())//设置发送通知的时间为当前时间

setContentIntent(Intent contentIntent)//设置点击通知的时候要发送的pendingIntent

setAutoCancel(boolean cancelable)//设置通知是否能被清除

setProgress(int max,int progress,boolean indeterminate)//如果设置这个属性的话通知中就会显示一个进度条,进度值为progress,最大值为max

设置完毕后调用build()即可创建通知,该方法将返回一个Notification的实例

通知创建出来后需要通过NotificationManager来发送:

notify(int uniqueId,Notification notification);//uniqueId是全app的一个唯一id值,如果要清除或者更新这个通知的话需要将uniqueId设置为相同的值

如果要清除这个通知,调用这个方法:

cancel(int uniqueId);

(2015年8月8日补充)

其实在平时的开发中,为了能兼容低版本的系统,同时又为了减少代码中对版本号的判断,可以考虑直接使用NotificationCompat.Builder,因为这个可以说是通用的

共用函数

private void Swap(int left, int right)
{
int temp;
temp = left;
left = right;
right =temp;
}

基本冒泡排序

基本冒泡排序的最好、最坏、平均情况下的时间复杂度都为O(n^2)。故算法的平均时间复杂度也为O(n^2)。

算法如下:
///     冒泡排序的过程很简单,首先将第一个记录的关键字与第
///     二个记录的关键字进行比较,若按升序排序,则当第一个记录的
///     关键字大于第二个记录的关键字时,将两个记录交换。然后再比
///     较第二个记录和第三个记录的关键字。依次类推,直至第n-1个
///     记录和第n个记录的关键字进行比较为止。通过这样的一趟冒
///     泡排序,结果使得关键字最大的记录被安置在最后一个记录的位
///     置上,即它的最终位置。接着进行第二趟冒泡排序,对前n-1个
///     记录进行同样的操作,其结果是使关键字次大的记录被安置到
///     倒数第二个位置上。这样,通过n一1趟冒泡排序,就将n-1个记
///     录安置到相应的最终位置上,剩下的关键字最小的记录就放在
///     第一个位置,从而实现了升序排序。

public void BasicBubble(int [] myArray)
{
for(int i = 0; i < myArray.Length – 1; i++)//循环的趟数
{
for(int j = 0; j < myArray.Length – 1 – i; j++)//每趟循环的次数
{
if( myArray[j] > myArray[j+1] )
{
Swap(myArray[i], myArray[i+1]);
}
}
}
}

第一种改进:不做无用功

  这种算法最好的时间复杂度为O(n)。平均,最坏时刻复杂度为O(n^2)。

算法如下:
/// 设置一个标志位,当没有交换的时候这个标志位不会变化,那么说明数据已经
/// 排序好了,就不需要再进行剩余的循环。只有在标志位被重新设置的情况下才会
/// 进行剩余的循环。

public static void ImproveBubble1(int [] myArray)
{
bool isSorted = false;

for(int i = 0; i < myArray.Length – 1 && !isSorted; i++)//只有在没有排序的情况下才继续循环
{
isSorted = true; //设定排序标志
for(int j = 0; j < myArray.Length – 1 – i; j++)
{
if( myArray[j] > myArray[j+1] )
{
isSorted = false; //如果是没有排序,就重新设定标志
Swap(myArray[i], myArray[i+1]);
}
}
}
}

第二种改进:记录犯罪现场

  算法2最好的时间复杂度为O(n)。平均,最坏时刻复杂度为O(n^2)。

算法如下:
///     在冒泡排序中,每趟排序实现了将最大(升序)或
///     最小(降序)的记录安置到未排序部分的最后位置,即最终位置。
///     通过进一步观察研究,由于每趟排序过程中,通过和邻记录关键字两两
///     比较,大(升序)或小(降序)的记录在不断地往下沉或往后靠,
///     小(升序)或大(降序)的记录在不断往上冒或往前靠。
///     每经过一趟排序,在最后次交换位置后而的记录都已经排好序。根据
///     上面的思路,对n个记录进行第k趟排序,首先需在第k-1趟排
///     序时记下最后交换的位置。然后在第k趟排序时,将第一个记
///     录的关键字与第二个记录的关键字进行比较,符合交换条件时,
///     进行交换。再比较第二个记录和第三个记录的关键字,依次类
///     推,直至第m-1个记录和第m个记录的关键字进行比较,而不
///     需要比较至n-k-1个记录。在大部分排序中,m都小于n-k-1
///     从而减少了比较趟数和每趟的比较次数。由于在第一趟排序时,
///     没有上一趟排序的m值。因此,还要设置m的初始值为n-1。

public static void ImproveBubble2(int[] myArray)
{
int m = myArray.Length – 1;
int k, j;

while( m > 0 )
{
for( k=j=0; j<m; j++)
{
if( myArray[j] > myArray[j+1])
{
Swap(myArray[j], smyArray[j+1]);
k = j; //记录每次交换的位置
}
}
m = k; //记录最后一个交换的位置
}
}

第三种改进:双向扫描,一网打尽

  算法最好的时间复杂度为O(n),最坏时刻复杂度为O(n^2)。

算法如下:
///  对n个记录进行排序时,设up记录了从前面向后面依次进行扫描时最后的交换位置,
///  low记录了从后面向前面依次进行扫描时最前的交换位置。
///  由上个改进的冒泡排序的原理可知,up后面的记录和low前面的记录都已有序。
///  每趟排序都由两次不同方向的比较、交换组成。第一次是从未排好序的第一个记录开始,
///  即从low记录开始,向后依次两两比较,如果不符合条件,则交换之,
///  直至比较到未排好序的最后一个记录,即up记录为止。
///  同时记下最后一次交换的位置,并存于up。第二次是从未排好序的最后一个记录开始,
///  即从up记录开始,向前依次两两比较,如果不符合条件,则交换之,
///  直至比较到未排好序的第一个记录,即low记录为止。同时记下最后次交换的位置,
///  并存于low. 这样,就完成了一趟排序。
///  每趟排序都实现了将未排好序部分的关键字大的记录往后移(升序),
///  关键字小的记录往前移(升序),从而使两端已排好序(如果是降序,记录移动的方向则相反)。
///  未排好序部分的记录的首尾位置分别由low和up指明。
///  不断按上面的方法进行排序,使两端已排好序的记录不断增多,
///  未排好序部分的记录逐渐减少。即low和up的值不断接近,当low>=up时,
///  表明已没有未排好序的记录,排序就完成了。由于在第一趟排序时,
///  没有上趟排序的low和up值。因此,还要设置low和up的初始值分别为0和n-1。

public static void ImproveBubble3(int [] myArray)
{
int low, up, index, i;
low = 0;
up = myArray.Length – 1;
index = low;

while( up > low)
{
for( i=low; i<up; i++)  //从上向下扫描
{
if(myArray[i]>myArray[i+1])
{
Swap(ref myArray[i], ref myArray[i+1]);
index = i;
}
}

up = index; //记录最后一个交换的位置
for(i=up; i>low; i–)  //从最后一个交换位置处从下向上扫描
{
if(myArray[i]<myArray[i-1])
{
Swap(ref myArray[i], ref myArray[i-1]);
index = i;
}
}
low = index;  //记录最后一个交换的位置
}
}

由于安装的时候忘了截图,于是只能盗用别人的图了,原作者看到后别打我啊TAT

注:安装3DS Max 2014之前要求安装Microsoft .NET Framework 4.0(注意:这是成功安装的必须前提条件)

运行安装程序:

启动界面

接着有可能会看到这个界面(看不到那就算了)

选择驱动

 

安装界面

安装序列号:359-35184381;666-69696969 或 667-98989898、400-45454545    产品密钥:128f1

输入序列号

3DS Max 2014安装完成后,桌面的快捷方式默认启动的是英文版,为了方便在Windows的开始菜单-所有程序-Autodesk-Autodesk 3ds Max 2014下找到3ds Max 2014 – Simplified Chinese,点击它启动的便是中文版,启动过以后就默认为中文版。(在点击之前请先断开网络连接)

开始菜单选择中文版

 

在破解前一定要断开网络,然后启动3ds Max 2014会弹出激活的对话框,会要求你注册这是根据提示随意注册就行,接着在激活的对话框内按下列图示操作:

提示激活界面

请务必以管理员的身份打开注册机,然后按照下面两张图操作:

注册1

 

粘贴激活码以后一定要记住先点击注册机的“Patch”按钮!

注册2

注册机弹出下列对话框时按“确定”,接着才可以点击3ds Max 激活对话框的“下一步”

注册3

激活成功!

激活成功

 

问:使用UltraISO制作光盘映像文件时,选项“启用ISO文件卷过滤器”是什么意思,选择与否有什么区别?
答:关于“ISO文件卷过滤器”的说明:

1)ISO文件卷过滤器的作用只是去掉尾部的空白数据而已。

2)有些光盘加密程序会在尾部隐藏加密信息,这些信息位于ISO文件卷之外,因此启用“ISO文件卷过滤器”会出现问题。这时切忌启用“ISO文件过滤器”。否则无法正常制作镜像,或制作的镜像可能无法使用。这也是UltraISO单独设置这个选项的道理。

3)几乎所有刻录软件在将ISO镜像刻录到CD-R上时会添加空白数据(Padding Blocks),目的是提高光盘的访问性能。否则有些老光驱在定位最外边的扇区时可能有问题。

4)Windows资源管理器通过ISO文件卷的目录信息,直接访问文件数据。尾部的空白数据不会对光盘的使用造成任何影响。

5)因此几乎所有的镜像制作软件,包括Nero,CloneCD,Alcohol 102%均采用“忠实原盘”的方式制作ISO。这样既不影响使用,也不会遗漏任何有用数据。

6)UltraISO的“ISO文件卷过滤器”对使用MD5校验有所帮助。如果ISO文件为标准数据镜像,可以用WinMD5软件提取MD5校验码;刻录 后,用UltraISO+ISO过滤器可制作大小相同的镜像,方便进行MD5校验。不过这种方法比较繁琐。建议用UltraISO的”检查CD/DVD光 盘”功能,先计算ISO的MD5码,然后直接计算光盘的MD5码,可直接比较。在此项功能,ISO过滤器缺省打开,因此不会包含光盘尾部的空白扇区。

关于UltraISO提供“ISO文件卷过滤器”的好处:

1)在制作镜像文件时采用“忠实原盘”的方式,同时提供“ISO文件卷过滤器”选项。
一般情况下,不启用“ISO文件卷过滤器”,确保制作的镜像不会丢失重要信息。
如果是标准数据光盘,启用“ISO文件卷过滤器”,可得到大小与原ISO一样的镜像文件,便于检查。

2)在检查光盘/ISO文件时,自动启用“ISO文件卷过滤器”,从而避免因刻录软件添加Padding Blocks而造成的差异。

博客之前挂靠在香港的虚拟主机上,由于一些不明原因,主机商倒闭跑路了,结果就是什么都找不回来了。

于是我重新自己再搭建环境,再次建站,吸取之前的教训,经常要备份啊!

之前的东西没有了就没有了吧,现在是一个全新的开始