1 つのアクティビティで 2 つの異なるハンドラーを使用する代わりの方法を提案してください。または、この方法で問題ないことを教えてください。
詳細: Microchips ADK Android スターター キットで使用するコードを開発中です。すべてがスムーズに実行されていますが、コードで 2 つの異なるハンドラーが実行されているという問題があります。動作しますが、推奨されていないことに気付きました。時間遅延を作成するために使用する最初のハンドラーで、post コマンドを使用して結果を起動します。2 番目のハンドラは、USB アクセサリ フレームワーク ファイルと通信するために提供された Microchip のサンプル コードで使用されます。私は、マイクロチップ社のコードを書き直すよりも、いじくり回すことだけを好みます。同様のコード:
public class MainActivity extends Activity
{ ...
final Handler mHandler = new Handler(); // handler for startTimeDelay
...
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
...
Button btnSetTimeDelay = (Button) findViewById(R.id.btnChangeTimeDelay);
btnSetTimeDelay.setOnClickListener
( new View.OnClickListener()
{ public void onClick(View v)
{
setBackgroundColorLinearLayout(color.holo_red_dark); //red background
displayLockIsOpen(false); // display closed lock message
startTimeDelay(); // wait to open the lock
}
}
);
} // onCreate
...
final Runnable mUpdateResults = new Runnable()
{ public void run()
{ setBackgroundColorLinearLayout(color.holo_green_dark); //green background
displayLockIsOpen(true); // display open lock message
}
};
protected void startTimeDelay()
{ Thread t = new Thread()
{ @override
public void run()
{ SystemClock.sleep(global_delay);
mHandler.post(mUpdateResults); // run mUpdateResults code
};
};
t.start();
} // startTimeDelay
// USB accessory handler from Microchip, for ADK
private Handler handler = new Handler()
{ @override
public void handleMessage(Message msg)
{
...
switch(msg.what)
{ case USBAccessoryWhat:
...lots of code here from Microchip
} // switch msg.what
} // handleMessage
}; // Handler
} // MainActivity