标签:
1 public class BaseActivity<T> extends AppCompatActivity { 2 3 /** 4 * 获取T的名称,不能用getLocalClassName代替 5 */ 6 @SuppressWarnings("unchecked") 7 private String getCls() { 8 Class<T> cls = (Class<T>) (((ParameterizedType) (this.getClass() 9 .getGenericSuperclass())).getActualTypeArguments()[0]); 10 11 return cls.getSimpleName(); 12 } 13 14 /** 15 * 以下是生命周期,onCreate--->onDestroy 16 */ 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 21 init(); 22 } 23 24 private void init() { 25 // 写死竖屏 26 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 27 28 // 无actionBar 29 requestWindowFeature(Window.FEATURE_NO_TITLE); 30 31 // 跳转效果,不能放在initSkin后面 32 // WindowUtils.initExplodeTrans(this); 33 34 // 换肤操作 35 // SkinUtils.initSkin(this); 36 37 } 38 39 /** 40 * 有supportFragmentAttach的时候才会执行,当然也有Fragment的方法 41 * 可以传一些数据进去 42 */ 43 @Override 44 public void onAttachFragment(Fragment fragment) { 45 Log.e(getCls(), "--->onAttachSupportFragment"); 46 super.onAttachFragment(fragment); 47 } 48 49 /** 50 * setContentView()或者addContentView()方法执行完毕时就会调用该方法 51 * 可以在这里加载数据 52 */ 53 @Override 54 public void onContentChanged() { 55 Log.e(getCls(), "--->onContentChanged"); 56 super.onContentChanged(); 57 } 58 59 /** 60 * singTop模式下,在栈顶的activity启动本身的时候是不会再onCreate的, 61 * 也就不会接受到intent,所以需要在以下两种方法接受intent 62 * 1.在onNewIntent里先setIntent再getIntent().getExtra(); 63 * 2.在onNewIntent里直接intent.getExtra(); 64 */ 65 @Override 66 protected void onNewIntent(Intent intent) { 67 Log.e(getCls(), "--->onNewIntent"); 68 super.onNewIntent(intent); 69 } 70 71 /** 72 * activity完全不可见--->可见时,从这里开始生命周期 73 */ 74 @Override 75 protected void onRestart() { 76 super.onRestart(); 77 } 78 79 @Override 80 protected void onStart() { 81 super.onStart(); 82 } 83 84 /** 85 * 接受setResult回传的intent 86 */ 87 @Override 88 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 89 Log.e(getCls(), "--->onActivityResult"); 90 super.onActivityResult(requestCode, resultCode, data); 91 } 92 93 /** 94 * onCreate和onRestoreInstanceState是接受Bundle的 95 * onSaveInstanceState是finish时保存传送Bundle的 96 */ 97 @Override 98 public void onRestoreInstanceState(Bundle savedInstanceState) { 99 Log.e(getCls(), "--->onRestoreInstanceState"); 100 super.onRestoreInstanceState(savedInstanceState); 101 } 102 103 /** 104 * 当Activity彻底运行起来之后回调onPostCreate方法 也就是onCreate执行完后 105 */ 106 @Override 107 protected void onPostCreate(@Nullable Bundle savedInstanceState) { 108 Log.e(getCls(), "--->onPostCreate"); 109 super.onPostCreate(savedInstanceState); 110 } 111 112 /** 113 * activity部分不可见--->可见时,从这里开始生命周期 114 */ 115 @Override 116 protected void onResume() { 117 super.onResume(); 118 } 119 120 /** 121 * onResume执行完后执行 122 */ 123 @Override 124 protected void onPostResume() { 125 Log.e(getCls(), "--->onPostResume"); 126 super.onPostResume(); 127 } 128 129 /** 130 * DecorView在这里才会有params,viewGroup在这里才能add 131 * <p/> 132 * Window是WindowManager最顶层的视图,PhoneWindow是Window的唯一实现类 133 * DecorView是window下的子视图,是所有应用窗口(Activity界面)的根View 134 * <p/> 135 * 这里可以控制DecorView的大小来控制activity的大小,可做窗口activity 136 * 窗口activity记得调用activity.setFinishOnTouchOutside哦 137 */ 138 @Override 139 public void onAttachedToWindow() { 140 Log.e(getCls(), "--->onAttachedToWindow"); 141 super.onAttachedToWindow(); 142 // View decorView = getWindow().getDecorView(); 143 // 设置 WindowManager.LayoutParams params 144 // getWindowManager().updateViewLayout(decorView, params); 145 } 146 147 /** 148 * onCreateOptionsMenu:为什么不调用了?????那就不写了 149 * onPrepareOptionsMenu:每次在display Menu之前,都会去调用, 150 * <p/> 151 * 可以inflate(xml)或menu.add()来初始化Menu,动态变更时,需要首先调用menu.clear() 152 * 153 * @return 捕获返回true, 返回false不会显示menu菜单,包括actionbar 154 */ 155 @Override 156 public boolean onPrepareOptionsMenu(Menu menu) { 157 Log.e(getCls(), "--->onPrepareOptionsMenu"); 158 return super.onPrepareOptionsMenu(menu); 159 } 160 161 /** 162 * 从这里开始就代表被遮挡了 163 */ 164 @Override 165 protected void onPause() { 166 super.onPause(); 167 } 168 169 /** 170 * 如果是人为关闭Activity或者Fragment, onSaveInstanceState() 并不会被调用. 171 * onSaveInstanceState() 只有在系统即将要自动清理销毁Activity或Fragment前才会调用, 比如 172 * 1, 由于重力感应 手机从竖屏变为横屏, 173 * 2, 手机点击Home键和长按Home键 174 * 3, 点击电源键锁屏时 175 * 4, 从当前Activity跳到另一个Activity 176 * 5, 应用内存不足即将自动销毁时等情况 177 * 即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用 178 * 6, recreate之后也会调用的,配合起来可以做主题更换功能 179 */ 180 @Override 181 protected void onSaveInstanceState(Bundle outState) { 182 Log.e(getCls(), "--->onSaveInstanceState"); 183 super.onSaveInstanceState(outState); 184 // 这里执行一些额外存放数据的方法,然后也可以reCreate之后,在onCreate里读取 185 // outState.putInt("skin",-1); 186 } 187 188 @Override 189 protected void onStop() { 190 super.onStop(); 191 } 192 193 /** 194 * DecorView到这里没有params,viewGroup在这里之前remove 195 */ 196 @Override 197 public void onDetachedFromWindow() { 198 super.onDetachedFromWindow(); 199 } 200 201 /** 202 * 生命周期结束并不等于对象销毁,其他方法还是可以调用的 203 */ 204 @Override 205 protected void onDestroy() { 206 super.onDestroy(); 207 } 208 209 /** 210 * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以上是生命周期<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 211 * <p/> 212 * 触发条件:屏幕方向,uiMode,体统字体,屏幕布局,软键盘伸缩,用户所在地区等改变的时候。 213 * 捕获以上事件需要做以下几步: 214 * 1.<uses-permission Android:name="android.permission.CHANGE_CONFIGURATION"/> 215 * 2.在manifest中activity节点中声明android:configChanges="这里是你要捕获的触发条件类型" 216 * 3.重写onConfigurationChanged方法。 217 * 比如捕获了横竖屏切换,体统将不会重启activity,而是走onConfigurationChanged中的操作 218 */ 219 @Override 220 public void onConfigurationChanged(Configuration newConfig) { 221 super.onConfigurationChanged(newConfig); 222 Log.e(getCls(), "onConfigurationChanged"); 223 if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { 224 Log.e(getCls(), "onConfigurationChanged--->竖屏"); 225 } else if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { 226 Log.e(getCls(), "onConfigurationChanged--->横屏"); 227 } 228 } 229 230 /** 231 * 触摸事件分发 232 */ 233 @Override 234 public boolean dispatchTouchEvent(MotionEvent ev) { 235 Log.e(getCls(), "dispatchTouchEvent--->action:" + ev.getAction()); 236 return super.dispatchTouchEvent(ev); 237 } 238 239 /** 240 * 按键事件分发 241 */ 242 @Override 243 public boolean dispatchKeyEvent(KeyEvent event) { 244 Log.e(getCls(), "dispatchKeyEvent--->action:" + event.getAction()); 245 return super.dispatchKeyEvent(event); 246 } 247 248 /** 249 * 事件拦截, ViewGroup的事件拦截是onInterceptTouchEvent 250 */ 251 @Override 252 public void onUserInteraction() { 253 //Log.e(getCls(), "onUserInteraction"); 太多了 消了 254 super.onUserInteraction(); 255 } 256 257 /** 258 * 触摸事件处理 259 */ 260 @Override 261 public boolean onTouchEvent(MotionEvent event) { 262 Log.e(getCls(), "onTouchEvent--->action:" + event.getAction()); 263 return super.onTouchEvent(event); 264 } 265 266 /** 267 * 按键事件处理 ,menu、back、home三种事件 268 */ 269 @Override 270 public boolean onKeyDown(int keyCode, KeyEvent event) { 271 Log.e(getCls(), "onKeyDown--->action:" + event.getAction()); 272 return super.onKeyDown(keyCode, event); 273 } 274 275 /** 276 * 按键事件处理 ,menu、back、home三种事件 277 */ 278 @Override 279 public boolean onKeyUp(int keyCode, KeyEvent event) { 280 Log.e(getCls(), "onKeyUp--->action:" + event.getAction()); 281 return super.onKeyUp(keyCode, event); 282 } 283 284 /** 285 * 按键事件处理 ,menu、back、home三种事件 286 */ 287 @Override 288 public boolean onKeyLongPress(int keyCode, KeyEvent event) { 289 Log.e(getCls(), "onKeyLongPress--->action:" + event.getAction()); 290 return super.onKeyLongPress(keyCode, event); 291 } 292 293 /** 294 * 菜单打开时 295 */ 296 @Override 297 public boolean onMenuOpened(int featureId, Menu menu) { 298 Log.e(getCls(), "onMenuOpened"); 299 return super.onMenuOpened(featureId, menu); 300 } 301 302 /** 303 * 选项菜单点击回调, 也可使用监听器 menuItem.setOnMenuItemClickListener(); 304 */ 305 @Override 306 public boolean onOptionsItemSelected(MenuItem item) { 307 Log.e(getCls(), "onOptionsItemSelected--->" + item.getTitle()); 308 switch (item.getItemId()) { 309 case android.R.id.home: 310 onBackPressed(); 311 return true; 312 } 313 return super.onOptionsItemSelected(item); 314 } 315 316 /** 317 * 在选项菜单关闭时被调用 318 */ 319 @Override 320 public void onOptionsMenuClosed(Menu menu) { 321 Log.e(getCls(), "onOptionsMenuClosed"); 322 super.onOptionsMenuClosed(menu); 323 } 324 325 /** 326 * 创建上下文菜单 327 */ 328 @Override 329 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 330 Log.e(getCls(), "onCreateContextMenu"); 331 super.onCreateContextMenu(menu, v, menuInfo); 332 } 333 334 /** 335 * 监听上下文菜单选项事件,item.getMenuInfo()获取每个item的position 336 */ 337 @Override 338 public boolean onContextItemSelected(MenuItem item) { 339 Log.e(getCls(), "onContextItemSelected--->" + item.getTitle()); 340 return super.onContextItemSelected(item); 341 } 342 343 /** 344 * 上下文菜单关闭时调用 345 */ 346 @Override 347 public void onContextMenuClosed(Menu menu) { 348 Log.e(getCls(), "onContextMenuClosed"); 349 super.onContextMenuClosed(menu); 350 } 351 352 /** 353 * 相当于KeyEvent.KEYCODE_BACK 返回键 , 相当于menu的返回事件 354 */ 355 @Override 356 public void onBackPressed() { 357 Log.e(getCls(), "onBackPressed"); 358 super.onBackPressed(); 359 } 360 361 /** 362 * 将要进入后台(background)时被回调 363 */ 364 @Override 365 protected void onUserLeaveHint() { 366 Log.e(getCls(), "onUserLeaveHint"); 367 super.onUserLeaveHint(); 368 } 369 370 /** 371 * 在window执行动画的时候activity不能draw,所以就有了下面的方法 372 */ 373 @Override 374 public void onEnterAnimationComplete() { 375 Log.e(getCls(), "onEnterAnimationComplete"); 376 super.onEnterAnimationComplete(); 377 } 378 379 /** 380 * 有attach的fragment时,当fragment也Resume时被回调 381 * 最好在这里执行已经存在的fragment的transaction操作 382 */ 383 @Override 384 protected void onResumeFragments() { 385 Log.e(getCls(), "onResumeFragments"); 386 super.onResumeFragments(); 387 } 388 389 /** 390 * 焦点变化 391 */ 392 @Override 393 public void onWindowFocusChanged(boolean hasFocus) { 394 Log.e(getCls(), "onWindowFocusChanged--->" + hasFocus); 395 super.onWindowFocusChanged(hasFocus); 396 } 397 398 /** 399 * title改变时 400 */ 401 @Override 402 protected void onTitleChanged(CharSequence title, int color) { 403 Log.e(getCls(), "onTitleChanged--->" + title); 404 super.onTitleChanged(title, color); 405 } 406 407 /** 408 * 成功执行onSupportNavigateUp并且当前activityFinish的时候 409 */ 410 @Override 411 public boolean onSupportNavigateUp() { 412 Log.e(getCls(), "onSupportNavigateUp"); 413 return super.onSupportNavigateUp(); 414 } 415 416 }
标签:
原文地址:http://www.cnblogs.com/gg1992/p/5467835.html