4

背景

很多时候,我们希望允许用户在安卓应用上分享一些东西。

这可以使用下一个函数来完成:

public static Intent prepareSharingIntent() {
  final List<Intent> targetedShareIntents = new ArrayList<Intent>();
  final Intent shareIntent = new Intent(Intent.ACTION_SEND);
  final Intent smsIntent = new Intent(Intent.ACTION_VIEW);
  targetedShareIntents.add(smsIntent);
  shareIntent.setType("text/plain");
  smsIntent.setType("vnd.android-dir/mms-sms");
  final String invitationMessage = "check out my App!";
  smsIntent.putExtra(Intent.EXTRA_TEXT, invitationMessage);
  shareIntent.putExtra(Intent.EXTRA_TEXT, invitationMessage);
  shareIntent.putExtra("sms_body", invitationMessage);
  smsIntent.putExtra("sms_body", invitationMessage);
  shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Check out this app!");
  smsIntent.putExtra(Intent.EXTRA_SUBJECT, "Check out this app!");
  shareIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {}));
  final Intent chooserIntent = Intent.createChooser(shareIntent, "Share using...");
  chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY
          | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  return chooserIntent;
}

问题

一些用户(比如我)有很多可以处理共享意图的应用程序。

这意味着有时从我点击分享内容到显示对话框之间会有很长的延迟(在某些情况下可能是一秒甚至更长),所以这是一种非常不受欢迎的行为。

我有耐心,但也许有些用户会因此认为该应用程序“滞后”。

事实上,我注意到这个问题出现在许多应用程序(包括 Play 商店应用程序)上。用户没有得到设备当前执行某些操作来显示对话框的反馈。

问题

为了使它看起来更流畅,或者至少显示一些进度对话框,直到显示真正的对话框,可以做些什么?

4

1 回答 1

0

怎么样:您将 prepareSharingIntent() 代码放在 AsyncTask 中,并在应用程序启动时启动该任务。然后,您可以持有对“chooserIntent”的全局引用(例如在 Application 类中),并在引用不为空且用户单击共享按钮时显示它。

确保以低优先级运行它,以免减慢应用程序的启动速度:

private class LongOperation extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        chooserIntent = prepareSharingIntent();
        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) { }

    @Override
    protected void onPreExecute() { }

    @Override
    protected void onProgressUpdate(Void... values) { }
}
于 2013-08-12T09:39:56.430 回答