小编fxf*_*mxf的帖子

如何发送具有远程依赖项(gradle)的Android库(aar)?

我正在尝试使用具有远程依赖关系的gradle构建aar文件.下面是一个示例构建脚本.如您所见,我有两个依赖项.我遇到的问题是当我发布时,aar文件不包含远程依赖项,所以当我在其他项目中包含aar文件时,我得到NoClassDefFound错误.

我发现如果我将jar从我当地的maven repo复制到我项目中的libs文件夹,那么jar确实会包含在发布版本中.如何在aar文件中包含远程依赖项?我还在其他地方读到,这样运送依赖关系是不好的做法,所以如果有更好的方法来做我想做的事情,我就是为了它.

buildscript {

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral()
    mavenLocal()
}

android {
... omitted for brevity
}

dependencies {
    compile 'com.somepackage:someartifact:1.0'
    compile 'com.anotherpackage:artifact:2.0'
}
Run Code Online (Sandbox Code Playgroud)

android gradle maven aar

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

关于主ui线程的Android AsyncTask onPostExecute

我遇到了AsyncTask和onPostExecute的问题.我发现onPostExecute正在与主ui线程不同的线程上执行,这导致在修改任何视图时发生CalledFromWrongThreadException.

我进行了一些日志记录,以查看运行onPreExecute,doInBackground和onPostExecute的线程.我会看到这样的结果......

onPreExecute ThreadId: 1
doInBackground ThreadId: 25
onPostExecute ThreadId: 18
Run Code Online (Sandbox Code Playgroud)

我相信主ui线程id是1,我希望onPre和onPost都在线程1上执行.我确保创建并从ui线程调用execute方法(例如在Activity的onCreate中).

另外需要注意的是,我注意到以后的异步任务将在与先前异步任务onPostExecute方法相同的线程上运行其onPostExecute方法(在本例中为线程18).

现在,为了解决这个问题,我在调用runOnUiThread时将代码包装在我的onPostExecute方法中,但我认为这很麻烦,并且想要解决真正的问题.

我没有想法!任何人有任何见解?我很乐意回答任何可以帮助进一步调查的问题!

编辑:

有两种方法可以在代码中运行异步任务.我想知道这些例子中的后者是否会导致一些奇怪的事情发生?

public class SomeActivity extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main_layout);

       new SomeAsyncTask().execute();
   }

   private class SomeAsyncTask extends AsyncTask<String, Void, Integer> {
        @Override
        public void onPreExecute() {
            Thread.currentThread().getId() // 1
            //Show a dialog
        }

        @Override
        public Integer doInBackground(String... params) {
            Thread.currentThread().getId() // 25
            return 0;
        }

        @Override
        public void onPostExecute(Integer result) {
            Thread.currentThread().getId() // 18
            //hide dialog
            //update text view …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask

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

标签 统计

android ×2

aar ×1

android-asynctask ×1

gradle ×1

maven ×1

multithreading ×1