android光传感实现摩斯密码,根据莫尔斯代码 - Android的闪烁闪光。 如何避免ANR次数由于睡觉? (火炬APP)...
所以,我做了一個(gè)火把應(yīng)用...正常火炬功能完全正常,沒有任何問題。
下面介紹以下功能,可能會(huì)導(dǎo)致可能的ANR的說,我想通過閃爍的閃光燈發(fā)出SOS信息(莫爾斯電碼)。 (其111-000-111),所以它開 - 開 - 開 - 關(guān) - 關(guān) - 和重復(fù)。
(慢慢讀)我“開”是一小會(huì)兒,然后微微一晃,“開”再次 - 這是區(qū)分兩個(gè)連續(xù)“開” S ......這就是我得到三個(gè)不同的閃爍。
麻煩的是,對(duì)于延時(shí),我把線程睡眠。(這種方法的工作最適合我)
下面是我的示例功能,它閃爍出SOS:(我有一個(gè)SOS按鈕,單獨(dú))
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一次。 不過,雖然這閃爍,閃爍是怎么回事,我的應(yīng)用程序被凍結(jié)了。 閃爍SOS是完美的。 但它并沒有任何按鈕點(diǎn)擊,甚至后退按鈕響應(yīng)中途停止。
我認(rèn)為這是因?yàn)榫€程(UI)正在睡覺,因此它并不關(guān)心用戶正在做)......但肯定點(diǎn)擊注冊(cè),如果按照到Android如果沒有后在規(guī)定的看著的時(shí)間(我想了幾秒鐘)期...該應(yīng)用程序進(jìn)入ANR。
所以,我需要與我定義的間隔短暫的停頓(正如上面我用300毫秒)。 但我也想知道如何讓應(yīng)用同時(shí)響應(yīng)說按鈕點(diǎn)擊或后退按鈕按下,以避免ANR的,并給予用戶關(guān)閉在任何時(shí)候閃爍的能力。
這個(gè)怎么做 ?
編輯 Waza_Be的解決方案:
好吧,這里是根據(jù)Waza_Be我修改的功能。 這個(gè)問題似乎是,它等待300毫秒(在我的情況)......但我有幾個(gè)postDelay功能 - 因此,我認(rèn)為它實(shí)際上是排隊(duì)的所有功能于一體,與300毫秒的等待期是有些重疊。 這一時(shí)期結(jié)束后,所有的代碼運(yùn)行起來一次,使得它毫無意義。
當(dāng)我嘗試這樣做,閃光燈閃爍而迅速,不與微妙的停頓和閃爍效果我想要的。
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);
}
}
我需要單獨(dú)暫停。 后或每TURN_ON或TURN_OFF為Flash之前說。 在每一個(gè)循環(huán)中,應(yīng)該單獨(dú)地等待在處理程序中運(yùn)行每一段代碼()。
總結(jié)
以上是生活随笔為你收集整理的android光传感实现摩斯密码,根据莫尔斯代码 - Android的闪烁闪光。 如何避免ANR次数由于睡觉? (火炬APP)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据库操作sqlite_使用
- 下一篇: oracle定义转储目录,Oracle