相关疑难解决方法(0)

后台任务,进度对话框,方向更改 - 是否有100%可行的解决方案?

我在后台线程(我使用AsyncTask)下载了一些来自互联网的数据,并在下载时显示进度对话框.方向更改,Activity重新启动,然后我的AsyncTask完成 - 我想关闭progess对话框并启动一个新的Activity.但是调用dismissDialog有时会抛出一个异常(可能是因为Activity被销毁而且还没有启动新的Activity).

处理此类问题的最佳方法是什么(从后台线程更新UI即使用户更改方向也能正常工作)?谷歌有人提供了一些"官方解决方案"吗?

android orientation android-orientation

233
推荐指数
4
解决办法
6万
查看次数

Android AsyncTask上下文行为

我一直在使用Android中的AsyncTasks,我正在处理一个问题.

举一个简单的例子,一个带有一个AsyncTask的Activity.在背景上的任务没有做任何壮观的事情,只是睡了8秒钟.

在onPostExecute()方法的AsyncTask结束时,我只是将按钮可见性状态设置为View.VISIBLE,仅用于验证我的结果.

现在,这种方法很有效,直到用户决定在AsyncTask工作时(在8秒睡眠窗口内)更改手机方向.

我理解Android活动生命周期,我知道活动被破坏并重新创建.

这就是问题所在.AsyncTask指的是一个按钮,显然是对最初启动AsyncTask的上下文的引用.

我希望,这个旧的上下文(因为用户导致方向更改)要么变为null,要么AsyncTask要引用NPE以引用它试图使其可见的按钮.

相反,没有抛出NPE,AsyncTask认为按钮引用不为null,将其设置为可见.结果?屏幕上什么也没发生!

更新:我通过保持WeakReference活动并在配置更改发生时切换来解决这个问题.这很麻烦.

这是代码:

public class Main extends Activity {

    private Button mButton = null;
    private Button mTestButton = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mButton = (Button) findViewById(R.id.btnStart);
        mButton.setOnClickListener(new OnClickListener () {
            @Override
            public void onClick(View v) {
                new taskDoSomething().execute(0l);
            }
        });
        mTestButton = (Button) findViewById(R.id.btnTest);   
    }

    private class TaskDoSomething extends AsyncTask<Long, Integer, Integer> 
    {
        @Override
        protected Integer doInBackground(Long... params) {
            Log.i("LOGGER", "Starting...");
            try {
                Thread.sleep(8000);
            } …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-context android-asynctask

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

如何使用Square的Retrofit网络库实现异步回调

作为一名开始使用Android的iOS开发人员,我遇到了Retrofit.我理解如何实现同步请求,但是在使用成功/失败回调实现异步请求时遇到了问题.具体来说,Callback语法对我来说并不清楚,并且没有具体的例子说明如何在Retrofit 网站,Square 博客引入Retrofit或我见过的其他地方这样做.有人可以发一些示例代码吗?我在Retrofit repo中提出了一个问题,要求他们用这个信息更新README.

java networking android asynchronous retrofit

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