android光传感实现摩斯密码,根据莫尔斯代码 - Android的闪烁闪光。 如何避免ANR次数由于睡觉? (火炬APP)...
所以,我做了一個火把應用...正常火炬功能完全正常,沒有任何問題。
下面介紹以下功能,可能會導致可能的ANR的說,我想通過閃爍的閃光燈發出SOS信息(莫爾斯電碼)。 (其111-000-111),所以它開 - 開 - 開 - 關 - 關 - 和重復。
(慢慢讀)我“開”是一小會兒,然后微微一晃,“開”再次 - 這是區分兩個連續“開” S ......這就是我得到三個不同的閃爍。
麻煩的是,對于延時,我把線程睡眠。(這種方法的工作最適合我)
下面是我的示例功能,它閃爍出SOS:(我有一個SOS按鈕,單獨)
public void sos(View v) {
String myString = "111000111";
for (int x = 0; x < myString.length(); x++) {
if (myString.charAt(x) == '1') {
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
c.setParameters(p);
c.startPreview();
flag = true;
} else {
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
flag = false;
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
}
}
上述閃爍出SOS一次。 不過,雖然這閃爍,閃爍是怎么回事,我的應用程序被凍結了。 閃爍SOS是完美的。 但它并沒有任何按鈕點擊,甚至后退按鈕響應中途停止。
我認為這是因為線程(UI)正在睡覺,因此它并不關心用戶正在做)......但肯定點擊注冊,如果按照到Android如果沒有后在規定的看著的時間(我想了幾秒鐘)期...該應用程序進入ANR。
所以,我需要與我定義的間隔短暫的停頓(正如上面我用300毫秒)。 但我也想知道如何讓應用同時響應說按鈕點擊或后退按鈕按下,以避免ANR的,并給予用戶關閉在任何時候閃爍的能力。
這個怎么做 ?
編輯 Waza_Be的解決方案:
好吧,這里是根據Waza_Be我修改的功能。 這個問題似乎是,它等待300毫秒(在我的情況)......但我有幾個postDelay功能 - 因此,我認為它實際上是排隊的所有功能于一體,與300毫秒的等待期是有些重疊。 這一時期結束后,所有的代碼運行起來一次,使得它毫無意義。
當我嘗試這樣做,閃光燈閃爍而迅速,不與微妙的停頓和閃爍效果我想要的。
public void sos(View v) {
String myString = "111000111";
Handler handler = new Handler();
for (int x = 0; x < myString.length(); x++) {
if (myString.charAt(x) == '1') {
handler.postDelayed(new Runnable() {
public void run() {
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
c.setParameters(p);
c.startPreview();
}
}, 300);
} else {
handler.postDelayed(new Runnable() {
public void run() {
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
}
}, 300);
}
handler.postDelayed(new Runnable() {
public void run() {
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
}
}, 300);
}
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
c.setParameters(p);
}
}
我需要單獨暫停。 后或每TURN_ON或TURN_OFF為Flash之前說。 在每一個循環中,應該單獨地等待在處理程序中運行每一段代碼()。
總結
以上是生活随笔為你收集整理的android光传感实现摩斯密码,根据莫尔斯代码 - Android的闪烁闪光。 如何避免ANR次数由于睡觉? (火炬APP)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据库操作sqlite_使用
- 下一篇: oracle定义转储目录,Oracle