相关疑难解决方法(0)

使用Android Test Framework进行Android AsyncTask测试

我有一个非常简单的AsyncTask实现示例,并且在使用Android JUnit框架测试它时遇到问题.

当我在普通应用程序中实例化并执行它时,它工作得很好.但是当它从任何Android测试框架类(即AndroidTestCase,ActivityUnitTestCase,ActivityInstrumentationTestCase2等)执行时,它表现得很奇怪:

  • doInBackground()正确执行方法
  • 然而,它没有任何调用它的通知方法(onPostExecute(),onProgressUpdate()等) -只是默默忽略它们没有表现出任何错误.

这是非常简单的AsyncTask示例:

package kroz.andcookbook.threads.asynctask;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.Toast;

public class AsyncTaskDemo extends AsyncTask<Integer, Integer, String> {

AsyncTaskDemoActivity _parentActivity;
int _counter;
int _maxCount;

public AsyncTaskDemo(AsyncTaskDemoActivity asyncTaskDemoActivity) {
    _parentActivity = asyncTaskDemoActivity;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    _parentActivity._progressBar.setVisibility(ProgressBar.VISIBLE);
    _parentActivity._progressBar.invalidate();
}

@Override
protected String doInBackground(Integer... params) {
    _maxCount = params[0];
    for (_counter = 0; _counter <= _maxCount; _counter++) {
        try { …
Run Code Online (Sandbox Code Playgroud)

junit android

94
推荐指数
5
解决办法
6万
查看次数

AudioManager在死线程上向处理程序发送消息?

我正在尝试以编程方式将卷提升到STREAM_MUSIC流的最大值,但是当我这样做时,我正在"向死机线程上的处理程序发送消息".此外,它似乎没有100%的时间提高音量,虽然当我得到这个错误时,它会提高它的大部分时间.

代码是:

System.out.println("Maximum volume for this stream is: "+maxstreamvol+" and it used to be set to: "+currentvol);     
final AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, maxstreamvol, AudioManager.FLAG_SHOW_UI);
am.setStreamSolo(AudioManager.STREAM_MUSIC, true);
System.out.println("Volume Raised!"); 
Run Code Online (Sandbox Code Playgroud)

在谷歌搜索后,似乎这个错误与多线程情况有关......此时的代码应该在UI线程上运行.

事实上,我甚至把它包围着:

runOnUiThread(new Runnable() {

    public void run() {
        // code_goes_here
    }
});
Run Code Online (Sandbox Code Playgroud)

而且,这产生了同样的错误.我看到的错误是这样的:

I/System.out(24949): Maximum volume for this stream is: 15 and it used to be set to: 0
W/MessageQueue(  490): Handler (android.media.AudioManager$FocusEventHandlerDelegate$1) {42b52f28} sending message to a Handler on a dead thread
W/MessageQueue(  490): java.lang.RuntimeException: …
Run Code Online (Sandbox Code Playgroud)

java android android-audiomanager android-handler

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