一. gridview去除item点击效果的方法:

1.代码中--> mGridView.setSelector(new ColorDrawable(Color.TRANSPARENT));

2.xml中--> android:listSelector="@null"


二.判断是全新安装还是更新

if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { if (!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false){
// 全新安装
  }


三.Dialog属性设置

// 设置点击外部区域退出dialog
        setCanceledOnTouchOutside(true);
        //设置显示在底部
         Window window = getWindow();                    
         window.setGravity(Gravity.BOTTOM);                  //设置dialog宽度为屏幕宽度   
         window.getDecorView().setPadding(0, 0, 0, 0);
         WindowManager.LayoutParams lp = window.getAttributes();
         lp.width = WindowManager.LayoutParams.FILL_PARENT;
         lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
         window.setAttributes(lp);

但是Dialog的显示依赖于Activity,所以不能在其它应用的界面上弹出Dialog.如果需要在任何情况下都能弹出悬浮框可以通过下面两种方法实现:

1. 通过WindowManager的addView, removeView, dispatchKeyEvent和onInterceptTouchEvent方法可以实现Dialog所有功能. 其中dispatchKeyEvent方法用来监听返回键等按键的按下事件, onInterceptTouchEvent可以实现点击悬浮窗其它地方隐藏的功能.

2. 使用一个背景是透明的Activity,在Activity中弹出Dialog

不管从功能的扩展和性能的高低上,我比较推荐第一种方法.


四.获取屏幕宽高

android获取屏幕的高度和宽度用到WindowManager这个类,两种方法:

 

1 、WindowManager wm = (WindowManager) getContext()

.getSystemService(Context.WINDOW_SERVICE);

 

int width = wm.getDefaultDisplay().getWidth();

int height = wm.getDefaultDisplay().getHeight();

 

2 、WindowManager wm = this .getWindowManager();

 

int width = wm.getDefaultDisplay().getWidth();

int height = wm.getDefaultDisplay().getHeight(); 五.ServiceService:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。

 

既然这样,那么我们为什么要用 Service 呢?其实这跟 android 的系统机制有关,我们先拿Thread 来说。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。  

 

举个例子:如果你的 Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该 Thread 需要在 Activity 没有start的时候也在运行。这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制之前创建的 Thread。因此你便需要创建并启动一个 Service ,在 Service 里面创建、运行并控制该 Thread,这样便解决了该问题(因为任何 Activity 都可以控制同一 Service,而系统也只会创建一个对应 Service 的实例)。  

 

因此你可以把 Service 想象成一种消息服务,而你可以在任何有 Context 的地方调用Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也可以在 Service 里注册 BroadcastReceiver,在其他地方通过发送 broadcast 来控制它,当然这些都是 Thread 做不到的。

六.LoadMode

&&android:taskAffinity

standard; singleTop; singleTask; singleInstance;

android:taskAffinity:当前activity是放在哪个任务栈里面