当我使用Handler.dispatchMessage(msg)时,handleMessage(Message msg)将在新线程上运行,但是当我使用Handler.sendMessage(msg)时,handleMessage(Message msg)将在主线程上运行,谁能告诉我和他们之间的区别.
谢谢!
演示:
public class MainActivity extends Activity
{
private String TAG = "MainActivity";
private Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Log.i(TAG, "Handler:" + Thread.currentThread().getId() + " & arg1=" + msg.arg1);
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "Main:" + Thread.currentThread().getId());
testMethod();
}
private void testMethod()
{
Thread thread = new Thread()
{
@Override
public void run()
{
Log.i(TAG, "Thread:" + Thread.currentThread().getId());
Message msg = mHandler.obtainMessage();
msg.arg1 …Run Code Online (Sandbox Code Playgroud) 我正在通过开发者网站关注性能提示.有人提到没有JIT的Android设备.但我搜索了无抖动的设备,但找不到一个广泛的列表.
有和没有JIT的设备之间也存在巨大差异:具有JIT的设备的最佳代码并不总是没有设备的最佳代码.
要么
在没有JIT的设备上,通过具有精确类型而不是接口的变量调用方法确实更有效
问题是哪些设备没有JIT,哪些设备有?当编程主要针对jit设备或者它并不重要时,最佳思维是什么?
在阅读" Media Playback "和" MediaPlayer "android文档后,我仍然感到困惑,需要有关setDataSource重载方法的经验建议.
我正在使用我的Project MediaPlayer中的一个Service组件,它将在播放音乐时成为前台服务.我在res/raw我的apk文件夹中有我的音乐文件(.mp3).要开始播放,我知道我必须准备MediaPlayer对象.因为Android应用程序中的服务默认使用单个进程和主线程,所以我不希望我的用户
在MediaPlayer自行准备时获得ANR(想想原始文件夹中的媒体文件是否有大的大小).然后我使用prepareAsync而不是prepare(同步).所以我不能用:
mp = MediaPlayer.create(context, R.raw.myfile);
Run Code Online (Sandbox Code Playgroud)
因为这已经在prepare()内部调用但不是prepareAsync().所以基本上我有两个选择(两个四个):
Uri myUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.myfile);
mp.setDataSource(context, myUri);
Run Code Online (Sandbox Code Playgroud)
要么
AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.myfile);
mp.setDataSource(fd.getFileDescriptor());
afd.close();
Run Code Online (Sandbox Code Playgroud)
使用其中之一后,我可以简单地使用:
mp.prepareAsync();
Run Code Online (Sandbox Code Playgroud)
最后,我的问题出现了"包括这些不同的方法,哪一个是最好的选择?一方面有什么好处?我错过了什么吗?"
虽然我读了很多关于日历和gregoriancalendar的内容,但仍然会出现一些复杂情况.哪个更好或者你建议使用什么?我无法弄清楚差异.
GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
要么
Calendar c = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
你说什么?
我们正在开发有关嵌入式Linux与C和C++的项目.我最近在函数中遇到了一个奇怪的语句:
bool StrangeFunction(void* arg1, void* arg2, void* arg3)
{
(void)arg1;
(void)arg2;
(void)arg3;
unsigned long keycode = (unsigned long)arg2;
switch(keycode)
{
...
Run Code Online (Sandbox Code Playgroud)
我在上面的代码中有两个问题
(void)arg1;?unsigned long keycode = (unsigned long)arg2;如果您不介意,我需要一些解释和相关链接来解释主题.谢谢.
我需要帮助.你能回答这些问题吗?我想将eclipse连接到我的数据库,我在eclipse中尝试过这些:Window>Show View>Other>Data Source Explorer.之后我们进入Database Connectionseclipse,然后右键单击数据库连接并单击New...然后选择MySql下面Connection Profile Types:,然后单击New Driver Definition.在New Driver Definition对话框下,存在MySql JDBC Driver特定的系统版本.我选择一个,但OK按钮被禁用.同样在顶部它说:" 无法在驱动程序定义指定的文件系统中找到JAR/zip:mysql-connector-java-xxx-bin.jar ".
如何在New Driver DefinitionData Source Explorer对话框中指定驱动程序模板和定义名称(在Data Tools Platform中)
是否有可能onProgressUpdate错过了一些调用publishProgress?我的意思是使用publishProgress调用可能在doInBackground和onProgressUpdate回调之间有一个传输未命中.因为我看到了.
class DoSomething extends AsyncTask Void, String, Void {
String[] S = new String[] {"a", "b", "c", "d"};
void doInBackground(Void... ps) {
for(String s : S) {
publishProgress(s);
}
}
void onProgressUpdate(String... vs) {
Log.d("", vs[0]);
}
Run Code Online (Sandbox Code Playgroud)
我遇到的结果是什么
abbd
android ×5
c ×1
calendar ×1
casting ×1
database ×1
device ×1
eclipse ×1
eclipse-dtp ×1
handler ×1
jit ×1
media-player ×1
mysql ×1
performance ×1