小编Fre*_*uss的帖子

Handler.dispatchMessage(msg)和Handler.sendMessage(msg)之间的区别

当我使用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)

android handler

11
推荐指数
1
解决办法
1万
查看次数

Android设备没有JIT

我正在通过开发者网站关注性能提示.有人提到没有JIT的Android设备.但我搜索了无抖动的设备,但找不到一个广泛的列表.

有和没有JIT的设备之间也存在巨大差异:具有JIT的设备的最佳代码并不总是没有设备的最佳代码.

要么

在没有JIT的设备上,通过具有精确类型而不是接口的变量调用方法确实更有效

问题是哪些设备没有JIT,哪些设备有?当编程主要针对jit设备或者它并不重要时,最佳思维是什么?

performance android jit device

7
推荐指数
1
解决办法
1970
查看次数

MediaPlayer setDataSource需要最佳实践建议

在阅读" 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)

最后,我的问题出现了"包括这些不同的方法,哪一个是最好的选择?一方面有什么好处?我错过了什么吗?"

android media-player

7
推荐指数
1
解决办法
6757
查看次数

GregorianCalendar或只是日历

虽然我读了很多关于日历和gregoriancalendar的内容,但仍然会出现一些复杂情况.哪个更好或者你建议使用什么?我无法弄清楚差异.

GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
Run Code Online (Sandbox Code Playgroud)

要么

Calendar c = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)

你说什么?

android calendar gregorian-calendar

4
推荐指数
1
解决办法
6285
查看次数

奇怪的指针投射与空*

我们正在开发有关嵌入式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)

我在上面的代码中有两个问题

  1. 这是什么意思(void)arg1;
  2. 是否可以使用 unsigned long keycode = (unsigned long)arg2;

如果您不介意,我需要一些解释和相关链接来解释主题.谢谢.

c casting void-pointers

4
推荐指数
1
解决办法
175
查看次数

如何使用Data Source Explorer从Eclipse连接MySql

我需要帮助.你能回答这些问题吗?我想将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中)

mysql eclipse eclipse-dtp

3
推荐指数
1
解决办法
1万
查看次数

onProgressUpdate错过了一些发布

是否有可能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


c发生了什么?
注意:这只是我的应用程序的插图,有时会发生这种情况(根本没有运行),我无法在这里编写所有代码,因为它太复杂了.但总的来说,这种情况正在发生.
那么任何想法?

database android android-asynctask

1
推荐指数
1
解决办法
1828
查看次数