2016年11月30日 星期三

[Android] 最近踩到的Android坑

近日踩到一些Anndroid的坑
但是有些網路上的技術文好像沒提(或是我沒查到?)
歡迎交流指正~

GPS

  • LocationManager getBestProvider(Criteria criteria, boolean enabledOnly)
    這個API沒辦法用 fake gps 去測!!
  • 紅米Android 6 就算關掉gps 他還是拿的到getLastKnownLocation的location,
    一定要關掉應用程式的權限才真正的關掉

app背景數據記憶體暫存清除,再點icon喚醒app

  • 平常都是從最外層的 application > activity > fragment onCreate,
    但是重新喚醒後先create的是最內層的fragment >>> 最外層fragment > application > activity,
    此時如果有甚麼東西從外層用fragment的建構子丟進來的東西,
    不要懷疑fragment就是沒拿到外層的東西
    取值請用getParentFragment

dialog開著旋轉螢幕crash

build gradle設定apk name帶有日期

  • 直接在 AS run 他沒有更新 build gradle的資訊,
    比如說,我 build 12.01.apk,隔天他會繼續run昨天的apk,但是改的code卻是產生了一個 12.02.apk,
    很容易納悶為什麼我改的東西好像沒改到?!
  • 最好的方法是只設定release apk(signed)才帶有日期,
    平常在run AS產生的apk就讓他的名字是default就好了,讓他一直覆蓋過去不要產生新的apk
    因為現在找不到確切方法如何只讓signed apk 有日期的設定,
    所以先愛用clean project 和 AS 右邊的gradle展開,左邊第一個按鈕 refresh gradle project (每日按XD|||)

recyclerview 長寬不能動態變換

  • 不然他會一直重新產生scroll長度,導致會看到跳動畫面的情況,
    我甚至還嘗試了recyclerview.layout()/recyclerview.setY() 效果超慘,
    目前看到做複合的header recyclerview 都是把recyclerview 高度寫死撐滿螢幕,
    但是會有fake的header view 給 recyclerview
    或是外面再包一層scrollview 再依照適當時機分配touch event

請善用 https://github.com/SalomonBrys/ANR-WatchDog

  • 寫了一年Android沒人告訴我可以用這個lib….
    上網查ANR大多都是要你找手機產生的trace.txt檔,好像要root才看的到orz
    不然就是模擬器,但是模擬器根本太慢,
    官方也只會提醒你不要把耗時的寫在主線程 O_<
    反正感謝這個lib加快了我debug的速度!!

Fragment蓋了兩層

  • click會穿透,請把裝fragment的view xml設置為clickable=true

Handler不要放在thread裡面

  • Exception只會叫你加個loop,但實際這樣寫會卡死
    是時候該去唸多線程處理了XD

method只會傳值不會傳位址


  • 如果把String傳進method改字,外面的String並不會跟著改變

2016年9月13日 星期二

[ACM] Q100 The 3n + 1 problem

好久沒寫ACM,練練手感。
我也放上Github了,好久沒寫這麼多註解了,如果有問題可以問我。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
/*CPE Q100: The 3n + 1 problem*/
/*題目
*/
using namespace std;
//題目講的演算法
long algorithm(long n){
long cycle = 1;
while(n > 1){
if(n%2 != 0){
n = 3*n + 1;
}else{
n = n/2;
}
cycle++;
}
return cycle;
}
int main(){
long i,j,n;
//無限迴圈讓使用者可以一直輸入數值進去(程式不會結束)
while(true){
//輸入i跟j
cin >> i >> j ;
//如果i比j大,i的值放到j,j的值放到i(交換)
//我們希望不管怎樣一定是i<j,後面邏輯才好處理
if(i>j){
long tmp = i;
i = j;
j = tmp;
}
//預設最大的輪迴次數為0
long maxCycle = 0;
//n的數值範圍是i到j,所以跑i到j範圍的迴圈
for(long n = i;n <= j;n++){
//執行題目所說的演算法
//計算他跑迴圈的次數
long nCycle = algorithm(n);
//如果比目前設定的最大輪迴次數還大
//就取代掉他把值放進maxCycle
if(nCycle > maxCycle){
maxCycle = nCycle;
}
}
cout << i << " " << j << " "<< maxCycle <<endl;
}
return 0;
}

2016年8月31日 星期三

Android Studio 2.1 高亮程式碼失效解法

最近把 Android Studio IDE 從1.5 升級到 2.1,似乎還是有BUG的樣子


發生症狀前

  • 我在換 lib 的 path ,想把 lib獨立出來,一直在改gradle跟 build gradle。

症狀

  • code只剩下 public 跟 extends 有顏色,但是變數名稱的顏色,還有method的顏色都不見了
  • 樹狀folder裡的java檔圖示錯誤,而且展開箭頭跟檔名空白空很多,gradle圖示也不對

嘗試解決

  • 以為 gradle 不認得這是可以run 的 project ,所以嘗試 Build> Clean Project > Rebuild Project ,甚至開別的專案來重複這樣的步驟,沒用
  • 按 File >Invalidate Caches / Restart ,Android Studio會重開,重新Build,很久,還是沒用
  • 重灌Android Studio,沒用

最終解決辦法

  • 到C槽的 C:\Users\(使用者名稱) ,你會看到一個 .AndroidStudio 2.1 資料夾,請砍掉,重開的時候會詢問你,選重置就對了,我真的是誤打誤撞解出來的,給困惑的人參考。

2016年4月23日 星期六

[Android]翻牌的ListView

做了翻牌的ListView,
第一次開源了UI小模組!!
請詳細這裡走-->   https://github.com/fightwen/ListCardFlip


2016年3月3日 星期四

[ACM]113 Power of Cryptography(未解決)

是的,久違的acm
這題被視為輕鬆過關的題目,
最後我看了一下大家的解法也是簡單到不行

2016年3月2日 星期三

[JAVA]必推書籍head first java

以新手的角度大推一本書,

書名:head first java

2016年2月20日 星期六

[JAVA]物件的等於

對於以前在學校寫C之後,
等於(=)這個符號的概念一直都是把左邊的值賦予給右邊的值


2016年1月26日 星期二

Android 技術聚會心得



2016/1/25
是我第一次參加這種技術聚會,天氣很冷,但是去的人還不少阿。
也認識了坐在旁邊的人XD,算是收穫滿多的