Kardos's Blog

Happy coding

Monday,May 16 2011,Generics 学习

Generics 在java 1.5 中为泛型

 1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。   

2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。   

3、泛型的类型参数可以有多个。   

4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。   

5、泛型的参数类型还可以是通配符类型。

例如Class<?> classType = Class.forName("java.lang.String");   

泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经

了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学 会了泛型70%的内容。   

例子一:使用了泛型   

public class Gen<T> {   

private T ob; //定义泛型成员变量   

public Gen(T ob) {   this.ob = ob;   }   

public T getOb() {   return ob;   }   

public void setOb(T ob) {   this.ob = ob;   }   

public void showType() {   System.out.println("T的实际类型是: " + ob.getClass().getName());   }   }   

public class GenDemo {   public static void main(String[] args){   //定义泛型类Gen的一个Integer版本   Gen<Integer> intOb=new Gen<Integer>(88);   

intOb.showType();   

int i= intOb.getOb();   

System.out.println("value= " + i);   

System.out.println("----------------------------------");   //定义泛型类Gen的一个String版本   

Gen<String> strOb=new Gen<String>("Hello Gen!");   

strOb.showType();   

String s=strOb.getOb();   

System.out.println("value= " + s);   }   }   

例子二:没有使用泛型   

public class Gen2 {   private Object ob; //定义一个通用类型成员   

public Gen2(Object ob) {   this.ob = ob;   }   

public Object getOb() {   return ob;   }   

public void setOb(Object ob) {   this.ob = ob;   }   

public void showTyep() {   System.out.println("T的实际类型是: " + ob.getClass().getName());   }   }   

public class GenDemo2 {   public static void main(String[] args) {   //定义类Gen2的一个Integer版本   

Gen2 intOb = new Gen2(new Integer(88));   

intOb.showTyep();   

int i = (Integer) intOb.getOb();   

System.out.println("value= " + i);   

System.out.println("---------------------------------");   //定义类Gen2的一个String版本   Gen2 strOb = new Gen2("Hello Gen!");   

strOb.showTyep();   

String s = (String) strOb.getOb();   

System.out.println("value= " + s);   }   }   

运行结果:   

两个例子运行Demo结果是相同的,控制台输出结果如下:   

T的实际类型是:   java.lang.Integer   value= 88   ----------------------------------   

T的实际类型是: java.lang.String   value= Hello Gen!   Process finished with exit code 0   

看明白这个,以后基本的泛型应用和代码阅读就不成问题了。

Thursday,May 12,2011-Eclipse_android_ApiDemo_学习8

值此512三周年之际,怀念那些逝去的生命,感谢温家宝总理对灾区人民的关心

20 Views/Animation/3D Transition

看了半天没明白,跳过

 

TuesDay,May 10,2011-Eclipse_android_ApiDemo_学习7

20. App/Intents

 

            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("audio/*");
            startActivity(Intent.createChooser(intent, "Select music"));
setType放回的是一个设置了Type的intent  这里“”中为MIME类型(自己google)的字符串createChooser
createChooser函数会创建一个ACTION_CHOOSER intent,系统对这个intent的响应是显示一个选择列表,其中显示候选的应用。
 
自己做一个实现createChooser函数的Mode
 
21. App/Menu
看得头晕,放弃,转看View
 

 

Tuesday,May 10,2011-Eclipse_android_ApiDemo_补充

 

findViewById有2中形式

R.layout.xx 是引用res/layout/xx.xml的布局文件(inflate方法),R.id.xx是引用布局文件里面的组件,组件的id是xx...(findViewById方法)。看看R.java配置文件吧,R对文件分类管理,多写几个layout.xml后你会发现,所有的组件id都能用R.id.xx来查看,但是组件不在setContentView()里面的layout中就无法使用,

getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

 

传入的Name

返回的对象

说明

WINDOW_SERVICE

WindowManager

管理打开的窗口程序

LAYOUT_INFLATER_SERVICE

LayoutInflater

取得xml里定义的view

ACTIVITY_SERVICE

ActivityManager

管理应用程序的系统状态

POWER_SERVICE

PowerManger

电源的服务

ALARM_SERVICE

AlarmManager

闹钟的服务

NOTIFICATION_SERVICE

NotificationManager

状态栏的服务

KEYGUARD_SERVICE

KeyguardManager

键盘锁的服务

LOCATION_SERVICE

LocationManager

位置的服务,如GPS

SEARCH_SERVICE

SearchManager

搜索的服务

VEBRATOR_SERVICE

Vebrator

手机震动的服务

CONNECTIVITY_SERVICE

Connectivity

网络连接的服务

WIFI_SERVICE

WifiManager

Wi-Fi服务

TELEPHONY_SERVICE

TeleponyManager

电话服务

例子: 

Context mContext = XXX.this;

LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(LAYOUT_INFLATER_SERVICE);  

Monday,May 09,2011-Eclipse_android_ApiDemo_学习6

19. App/Dialog

调用showDialog()方法,将会调用createDialog()调用onCreateDialog()此方法又在AlertDialogSamples中重写,覆盖activity中的onCreateDialog()方法,实现回调。

利用不同的封装可以实现不同的Dialog,重点讲解LayoutInflater类

一般来讲,我们用LayoutInflater做一件事:inflate。inflate这个方法总共有四种形式,目的都是把xml表述的layout转化为View。

将Layout文件转换为View,顾名思义,专门供Layout使用的Inflater。虽然Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater.

通过findViewById(),和getResource().layout()LinearLayout不再是Layout的代表,而只是一个普通的View。

 

 

Wednesday,May 04,2011-Eclipse_android_ApiDemo_学习5

18. App/Alarm/Alarm Service

AlarmManager对象配合Intent使用,可以定时开启一个Activity,发送一个BroadCast或者开启一个Service。

 mAlarmSender = PendingIntent.getService(AlarmService.this,

  0, new Intent(AlarmService.this, AlarmService_Service.class), 0);
这里调用的是       getService方法
(1)在指定时间后,执行某操作
(2)周期性执行某动作
(3)关于同时定义多个定时器和关闭指定定时器
//第二个参数,用来标识不同的send
NotificationManager(通知管理器):
NotificationManager负责通知用户事件的发生.
NotificationManager有三个公共方法:
1. cancel(int id) 取消以前显示的一个通知.假如是一个短暂的通知,试图将隐藏,假如是一个持久的通知,将从状态条中移走.
2. cancelAll() 取消以前显示的所有通知.
3. notify(int id,  Notification notification) 把通知持久的发送到状态条上.

Tuesday,April 26,2011-Eclipse_android_ApiDemo_学习4

14.App/Activity/Translucent

半透明,演示如何跳转到一个半透明的Activity.

在values中styles.xml中添加  

 <style name="Theme.Translucent" parent="android:style/Theme.Translucent">

        <item name="android:windowBackground">@drawable/translucent_background</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:colorForeground">#fff</item>
    </style>
使用了style,而且自定义的style是继承自android:style/Theme.Translucent,如果不继承它,在style的name字段中是不能使用点(.)的

在Androidmainfest.xml中使用我们自定义的name为Theme.Translucent风格。

android:theme="@style/Theme.Translucent">

15.App/Activity/Translucent Blur

让对话框后面的背景模糊显示

在setContentView()方法前添加

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

16.App/Activity/Wallpaper

获取当天背景为activity背景 android:theme="@style/Theme.Wallpaper" 

 

    <style name="Theme.Wallpaper" parent="android:style/Theme.Wallpaper">
        <item name="android:colorForeground">#fff</item>
    </style>
17.App/Alarm/Alarm Controller
 
Intent 表示一个目的,第一个参数表示所在类,第二个参数表示目标类
PendingIntent 即是一个Intent的描述
PendingIntent和Intent的区别:
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情
换种说法Intent 字面意思是意图,即我们的目的,我们想要做的事情,在activity中,我们可以立即执行它
PendingIntent 相当于对intent执行了包装,我们不一定一定要马上执行它,我们将其包装后,传递给其他activity或application
这时,获取到PendingIntent  的application 能够根据里面的intent 来得知发出者的意图,选择拦击或者继续传递或者执行

 

 PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
                    0, intent, 0);
注意:这里是调用getBroadcast方法

Android的Task和Activity(一)

 

android:allowTaskReparenting

  用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。

  如果这个特性没有被设定,设定到元素上的allowTaskReparenting特性的值会应用到Activity上。默认值为“false”。

  一般来说,当Activity启动后,它就与启动它的Task关联,并且在那里耗尽它的整个生命周期。当当前的Task不再显示时,你可以使用这个特性来强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另一个应用程序的主Task中。

  例如,如果e-mail中包含一个web页的链接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序定义的,但是,现在它作为e-mail Task的一部分。如果它重新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mail Task再次进入前台时,就看不到它了。

  Actvity的affinity是由taskAffinity特性定义的。Task的affinity是通过读取根Activity的 affinity 决定。因此,根据定义,根Activity总是位于相同affinity的Task里。由于启动模式为“singleTask”和 “singleInstance”的Activity只能位于Task的底部,因此,重新宿主只能限于“standard”和“singleTop”模式。

  android:alwaysRetainTaskState

  用来标记Activity所在的Task的状态是否总是由系统来保持——“true”,表示总是;“false”,表示在某种情形下允许系统恢复 Task 到它的初始化状态。默认值是“false”。这个特性只针对Task的根Activity有意义;对其它Activity来说,忽略之。

  一般来说,特定的情形如当用户从主画面重新选择这个Task时,系统会对这个Task进行清理(从stack中删除位于根Activity之上的所有Activivity)。典型的情况,当用户有一段时间没有访问这个Task时也会这么做,例如30分钟。

  然而,当这个特性设为“true”时,用户总是能回到这个Task的最新状态,无论他们是如何启动的。这非常有用,例如,像Browser应用程序,这里有很多的状态(例如多个打开的Tab),用户不想丢失这些状态。

  android:clearTaskOnLaunch

  用来标记是否从Task中清除所有的Activity,除了根Activity外(每当从主画面重新启动时)——“true”,表示总是清除至它的根

  Activity,“false”表示不。默认值是“false”。这个特性只对启动一个新的Task的Activity(根Activity)有意义;对Task中其它的Activity忽略。

  当这个值为“true”,每次用户重新启动这个Task时,都会进入到它的根Activity中,不管这个Task最后在做些什么,也不管用户是使用 BACK还是HOME离开的。当这个值为“false”时,可能会在一些情形下(参考alwaysRetainTaskState特性)清除Task的 Activity,但不总是。

  假设,某人从主画面启动了Activity P,并从那里迁移至Activity Q。接下来用户按下HOME,然后返回Activity P。一般,用户可能见到的是Activity Q,因为它是P的Task中最后工作的内容。然而,如果P设定这个特性为“true”,当用户按下HOME并使这个Task再次进入前台时,其上的所有的 Activity(在这里是Q)都将被清除。因此,当返回到这个Task时,用户只能看到P。

  如果这个特性和allowTaskReparenting都设定为“true”,那些能重新宿主的Activity会移动到共享affinity的Task中;剩下的Activity都将被抛弃,如上所述。

  android:finishOnTaskLaunch

  用来标记当用户再次启动它的Task(在主画面选择这个Task)时已经存在的Activity实例是否要关闭(结束)——“true”,表示应该关闭,“false”表示不关闭。默认值是“false”。

  如果这个特性和allowTaskReparenting都设定为“true”,这个特性胜出。Activity的affinity忽略。这个Activity不会重新宿主,但是会销毁。

  android:launchMode

  用于指示Activity如何启动。这里有四种模式,与Intent对象中的Activity Flags(FLAG_ACTIVITY_*变量)共同作用,来决定Activity如何启动来处理Intent。它们是:

  "standard"
  "singleTop"
  "singleTask"
  "singleInstance"
  默认模式是“standard”。

  这些模式可以分成两大组别,“standard”和“singleTop”一组,“singleTask”和“singleInstance”一组。具有 “standard”和“singleTop”启动模式的Activity可以实例化很多次。这些实例可以属于任何Task并且可以位于Activity stack的任何位置。典型的情况是,它们会进入调用startActivity()的Task(除非Intent对象包含 FLAG_ACTIVITY_NEW_TASK标志,在这种情况下会选择一个不同的Task——参考taskAffinity特性)。

  相反的,“singleTask”和“singleInstance”只能启动一个Task。它们总是位于Activity

  stack的底部。甚至,设备一次只能拥有一个Activity的实例——只有一个这样的Task。

  “standard”和“singleTop”模式只在一种情况下有差别:每次有一个新的启动“standard”Activity的Intent,就会创建一个新的实例来响应这个Intent。每个实例处理一个Intent。相似的,一个“singleTop”的Activity实例也有可能被创建来处理新的Intent。然而,如果目标Task已经有一个存在的实例并且位于stack的顶部,那么,这个实例就会接收到这个新的Intent(调用 onNewIntent());不会创建新的实例。在其他情况下——例如,如果存在的“singleTop”的Activity实例在目标Task中,但不是在stack的顶部,或者它在一个stack的顶部,但不是在目标Task中——新的实例都会被创建并压入stack中。

 

Android的Task和Activity(二)

 

FLAG_ACTIVITY_NO_HISTORY

  如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。这也可以通过设置noHistory特性。

  FLAG_ACTIVITY_NO_USER_ACTION

  如果设置,作为新启动的Activity进入前台时,这个标志将在Activity暂停之前阻止从最前方的Activity回调的onUserLeaveHint()。

  典型的,一个Activity可以依赖这个回调指明显式的用户动作引起的Activity移出后台。这个回调在Activity的生命周期中标记一个合适的点,并关闭一些Notification。

  如果一个Activity通过非用户驱动的事件,如来电或闹钟,启动的,这个标志也应该传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notification。

  FLAG_ACTIVITY_PREVIOUS_IS_TOP

  If set and this intent is being used to launch a new activity from an existing one, the current activity will not be counted as the top activity for deciding whether the new intent should be delivered to the top instead of starting a new one. The previous activity will be used as the top, with the assumption being that the current activity will finish itself immediately.

  FLAG_ACTIVITY_REORDER_TO_FRONT

  如果在Intent中设置,并传递给Context.startActivity(),这个标志将引发已经运行的Activity移动到历史stack的顶端。

  例如,假设一个Task由四个Activity组成:A,B,C,D。如果D调用startActivity()来启动Activity B,那么,B会移动到历史stack的顶端,现在的次序变成A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP标志也设置的话,那么这个标志将被忽略。

  FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

  If set, and this activity is either being started in a new task or bringing to the top an existing task, then it will be launched as the front door of the task. This will result in the application of any affinities needed to have that task in the proper state (either moving activities to or from it), or simply

  resetting that task to its initial state if needed.

  FLAG_ACTIVITY_SINGLE_TOP

  如果设置,当这个Activity位于历史stack的顶端运行时,不再启动一个新的。

  Activity和Task

  之前提到的,一个Activity可以启动另一个,即便是定义在不同应用程序中的Activity。例如,假设你想让用户显示一些地方的街景。而这里已经有一个Activity可以做到这一点,因此,你的Activity所需要做的只是在Intent对象中添加必要的信息,并传递给 startActivity()。地图浏览将会显示你的地图。当用户按下BACK键,你的Activity会再次出现在屏幕上。

  对于用户来说,看起来好像是地图浏览与你的Activity一样,属于相同的应用程序,即便是它定义在其它的应用程序里,并运行在那个应用程序的进程里。Android通过将这两个Activity保存在同一个Task里来体现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。它将相关的Activity组合在一起,以stack的方式管理。stack中根Activity启动Task——典型的,它就是用户在应用程序启动栏中选择的Activity。位于stack顶端的Activity是当前正在运行的——能够聚焦用户的动作。当一个Activity启动另一个,新的 Activity进入stack;它成为正在运行的Activity。之前的Activity仍保留在stack中。当用户按下BACK键,当前的 Activity从stack中退出,之前的那个成为正在运行的Activity。

  stack包含对象,因此,如果一个Task中有多个同一个Activity的实例时——多个地图浏览,例如——stack为每个实例拥有一个独立的入口。位于stack中的Activity不会重新调整,只是进入和退出。

  一个Task就是一组Activity,不是一个类或者在manifest中定义的一个元素。因此,没有办法为Task设置独立于它的 Activity的属性值。Task的值作为整体在根Activity中设置。例如,下一个章节会讨论Task的“affinity”;那个值就是从 Task中的根Activity中读取的。

  Task中的所有Activity作为一个单元一起移动。整个Task(整个Activity stack)可以进入前台或者退到后台。例如,假设当前Task中的stack中有4个Activity——3个位于当前Activity下方。用户按下 HOME键,进入到应用程序启动栏,然后选择一个新的应用程序(实际上,一个新的Task)。当前Task退到后台,并且新Task中的根 Activity会显示出来。然后,经过一段时间后,用户回到Home画面,然后再次选择前一个应用程序(前一个Task)。那个拥有4个 Activity的Task会进入前台。当用户按下BACK键,屏幕不会显示用户刚刚离开的Activity(前一个Task的根Activity)。而是,这个stack中的顶端Activity移除,相同Task中的前一个Activity会显示出来。

  刚才描述的行为是Activity和Task的默认行为。但有方法来完全改变它。Task之间的关联,和一个Task中的一个Activity行为,受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。调用者和响应者都有权决定如何发生。

  核心的Intent Flag有:
  FLAG_ACTIVITY_NEW_TASK
  FLAG_ACTIVITY_CLEAR_TOP
  FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
  FLAG_ACTIVITY_SINGLE_TOP
  核心的特性有:
  taskAffinity
  launchMode
  allowTaskReparenting
  clearTaskOnLaunch
  alwaysRetainTaskState
  finishOnTaskLaunch
  接下来的章节将描述一些Flag和特性的用法,如何相互影响,以及在使用时的建议。

  Affinity和新Task

  默认情况下,一个应用程序中的所有Activity都有affinity——也就是说,属于同一个Task中所有Activity有一个设定。然而,每个Activity都可以在元素的taskAffinity特性上设置单独的值。定义在不同应用程序中的Activity可以共享同一个 affinity,或者定义在同一个应用程序中的Activity设置不同的affinity。Affinity在两种环境下工作:Intent对象包含 FLAG_ACTIVITY_NEW_TASK标志,和Activity的allowTaskReparenting特性设置为“true”。

  FLAG_ACTIVITY_NEW_TASK:

  之前描述的,一个Activity一般通过调用startActivity()启动并加入到Task中。它同调用者一样,进入同一个Task。然而,如果传递给startActivity()的Intent对象中包含FLAG_ACTIVITY_NEW_TASK时,系统会搜索一个新的Task来容纳新的Activity。通常,如标志的名字所示,是一个新的Task。然而,并不是必须是。如果已经存在一个Task与新Activity的 affinity相同,这个Activity就会加入到那个Task中。如果不是,启动一个新的Task。

  allowTaskReparenting:

  如果一个Activity的allowTaskReparenting特性设置为“true”,它就能从启动的Task中移到有着相同 affinity的Task(这个Task进入到前台的时候)。例如,在一个旅游的程序中定义了一个可以报告选择城市的天气情况的Activity。它和同一个应用程序的其它Activity一样,有着相同的Affinity(默认的Affinity),并且它允许重新宿主。你的Activity中的一个启动了天气预报,因此,它初始化到和你Activity相同的Task中。然而,当旅游应用程序下一次进入到前台时,天气预报那个Activity将会重新编排并在那个Task中显示。

  如果从用户的角度出发,一个.apk文件包含多个“应用”的话,你可能希望为关联的Activity设置不同的affinity。

  Launch Mode

  这里4种不同的启动模式可以设置到元素的launchMode特性上:
  standard(默认模式)
  singleTop
  singleTask
  singleInstance

  这些模式有以下四点区别:

  l 哪个Task将容纳响应Intent的Activity。对于“standard”和“singleTop”来说,是产生Intent的那个Task(并调用startActivity())——除非Intent对象包含FLAG_ACTIVITY_NEW_TASK。在那种情况下,不同的Task将被选择,如“Affinity和新Task”中描述的那样。对比而言,“singleTask”和“singleInstance”指示Activity总是一个Task的根。它们定义一个Task;它们不会加入到另一个Task中。

  l 是否有多个Activity的实例。“standard”和“singleTop”可以实例化多次。它们可以属于多个Task,一个特定的Task可以有相同Activity的多个实例。对比而言,“singleTask”和“singleInstance”只能有一个实例。因为这些Activity只能位于Task的底部,这一限制意味着在设备的某个时间,不会出现这样Task的多个实例。

  l 是否可以在同一个Task中拥有其它的Activity。“singleInstance”Activity保持单身,在它的Task中它是仅有的 Activity。如果它启动另一个Activity,那个Activity将会放入到不同的Task中,而不管它的启动模式——好像 FLAG_ACTIVITY_NEW_TASK在Intent中一样。对于其它方面,,“singleInstance”等同于 “singleTask”。其它三个模式允许多个Activity加入到这个Task中。“singleTask”Activity总是位于Task的底部,但它可以启动其它的Activity并放入到它的Task中。“standard”和“singleTop”的Activity可以出现在stack 的任何地方。

  l 是否一个新的实例启动来处理新的Intent。对于默认的“standard”来说,都是创建一个新的实例来响应新的Intent。每个实例处理一个 Intent。对于“singleTop”来说,如果它位于目标Task的顶端,那么,已经存在的实例就可以重复使用来处理这个新的Intent。如果它不在顶端,那么它就不能重复使用。替代的,新的实例将创建来响应新的Intent,并进入到stack中。

  例如,假设一个Task的Activity stack中包含根Activity A和其它Activity B,C,D,并且D位于顶端,因此,stack是A-B-C-D。有一个Intent来了,它要启动D类型的Activity。如果D有默认的 “standard”启动模式,那么,一个新的实例将被启动并且stack变成A-B-C-D-D。然而,如果D的启动模式“singleTop”,已经存在的实例将去处理新来的Intent(因为它正好处在stack的顶端),并且stack依旧是A-B-C-D。

  换句话说,如果来临的Intent是冲着B类型的,那么,B类型的实例将被创建启动而不管B的模式是“standard”或“singleTop”(因为B不处在stack的顶端),因此,stack将会是A-B-C-D-B。

  之前提到的,设备上不会出现超过一个实例的“singleTask”或“singleInstance”Activity,因此,那个实例都将去处理所有新来的Intent。“singleInstance alimama_pid="mm_15626785_2176297_8615857"; alimama_titlecolor="3366CC"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="CCCCCC"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="9999"; alimama_width=468; alimama_height=90; alimama_type=2;

 

Monday,April 25,2011-Eclipse_android_ApiDemo_学习3

10.App/Activity/Redirection

app--Activity--redirection:演示如何修改永久保存的值,即SharedPreference和com.example. com.example.Android.apis.app.RedirectEnter

preferences.edit().remove("text").commit();//清除"text"键对应的值

11.App/Activity/Reorder Activities

有两种改变同一个Task中不同activity位置的方式,一为在manifest中设置activity的taskAffinity等属性。这里使用的是第二中,是用addFlags方法。

Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

startActivity(intent);

12.App/Activity/Save & Restore State

app-Activity--Save & Restore State:不知道想实现什么,看不懂

13.App/Activity/SetWallpaper

获取当前背景

 

final WallpaperManager wallpaperManager =           WallpaperManager.getInstance(this);
final Drawable wallpaperDrawable = wallpaperManager.getDrawable();
final ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.setDrawingCacheEnabled(true);
imageView.setImageDrawable(wallpaperDrawable);