小编Ste*_*e M的帖子

使用Picasso通过Bitmap获取回调

我正在使用Picasso为我的应用下载图像.

我遇到的情况是我需要Bitmap在加载到第一个之前访问第一个ImageView.Downloader.Response该类的存在似乎表明这是可能的,但我找不到任何使用示例.我不想写一堆更多的代码来异步处理这个特殊情况,如果它可以与Picasso一起使用的话.

谁能告诉我怎么做?

android bitmap picasso

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

令人费解的行为与REORDER_TO_FRONT

活动A启动活动B,没有标记.堆栈现在是AB,顶部是B. B使用FLAG_ACTIVITY_REORDER_TO_FRONT(唯一标志)启动活动A. 我希望这个堆栈现在是BA.但是,当此时按下后退按钮时,它将返回主屏幕.在这里,我希望将活动B带到前面.再次单击启动器图标后,应用程序将打开,其中B作为运行活动,堆栈中没有任何内容.

Launchmode是清单中的标准(默认).

这是预期的行为,我只是不理解它?

编辑:我创建了一个没有混淆因素的测试项目,仍然看到相同的行为.我只是不明白它,它似乎不是每个文档.

编辑:对我来说这个行为似乎是框架中的一个BUG,请参阅下面的答案我的评论.我需要一个解决方法.

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
public void onClickBtn(View view)
{
    Intent flowIntent = new Intent(this, SecondActivity.class);
    startActivity(flowIntent);
}
Run Code Online (Sandbox Code Playgroud)

}

public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); }

@Override
public boolean …
Run Code Online (Sandbox Code Playgroud)

android

21
推荐指数
3
解决办法
9136
查看次数

SwiftUI 中的左右填充(不是前导和尾随)

SwiftUI 中的填充修饰符采用EdgeInsets,例如

.padding(.leading, 8)

但是,只有前导和尾随 EdgeInsets,而不是左和右。这带来了一个问题,因为并非 RTL 语言中的所有内容都必须与 LTR 语言中的显示方式相反。

有没有办法实现与 padding 修饰符相同或相似的效果,无论语言的方向性如何,它都会强制填充位于左侧或右侧?

padding right-to-left ios swiftui

15
推荐指数
4
解决办法
5万
查看次数

如何修复Slow Rendering(Android vitals)

我有一个应用程序列在新Google Play控制台的最低25% - 用于慢速渲染的Android生命周期部分.我对此感到担心,因为有些文章似乎表示,如果你跌到最低25%,Google Play可能会在Play商店排名中惩罚你的应用.

但是,似乎无法为我的应用程序改进此指标.它播放音乐,并有一个SeekBar和TextView,每隔250ms更新一次,就像任何音乐播放器一样.我做了最小的基本程序来演示:

public class MainActivity extends AppCompatActivity {

    int count;
    SeekBar seekBar;
    TextView textView;

    Runnable runnable =
            new Runnable() {
                @Override
                public void run() {
                    textView.setText(Integer.toString(count));
                    seekBar.setProgress(count);
                    ++count;
                    seekBar.postDelayed(runnable, 250);
                }
            };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        seekBar = (SeekBar) findViewById(R.id.seek);
        textView = (TextView) findViewById(R.id.text);
        seekBar.post(runnable);
    }
}
Run Code Online (Sandbox Code Playgroud)

完整项目:https://github.com/svenoaks/SlowRendering.git

当我在类似于Nexus设备的硬件上运行此程序时,我得到一个
adb shell dumpsys gfxinfo com.example.xyz.slowrendering命令的结果:

Stats since: 19222191084749ns
Total frames rendered: 308
Janky frames: 290 (94.16%)
90th …
Run Code Online (Sandbox Code Playgroud)

android frame-rate google-play

14
推荐指数
2
解决办法
5219
查看次数

何时可以调用onTaskRemoved()?

文档说明了这一点

如果服务当前正在运行且用户已从服务的应用程序中删除了任务,则会调用此方法.

似乎只有当应用程序从最近的任务列表中滑出时才会调用它.按下后退按钮直到Activities任务中的所有内容都被销毁,这不会导致调用它.还有其他情况可以调用吗?

android android-service android-lifecycle

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

如何将期货放入集装箱?

我试图将异步生成的期货放在向量中,所以我不必做类似的事情:

auto f1 = async(....);
auto f2 = async(....);
...
f1.get();
f2.get();
...
Run Code Online (Sandbox Code Playgroud)

我用这段代码收到的编译错误是"调用'std :: _ 1 :: future'的删除构造函数".谁能帮助我如何正确地做到这一点.不确定将未来复制到向量中.

void AudioAnalyzer::retrieve()
{
    deque<shared_ptr<AudioAnalysis>>tempData(data);
    vector<future<void>> futures;
    for (int i = 0; i < NUM_THREADS; ++i)
    {
        auto f = async(bind(&AudioAnalyzer::analysisThread, this, _1), ref(tempData));
        futures.push_back(f);
    }

    for (auto& f : futures)
    {
        f.get();
    }

}

void AudioAnalyzer::analysisThread(deque<shared_ptr<AudioAnalysis>>& aq )
{

    while (true)
    {
        m.lock();
        if (aq.size() == 0)
        {
            m.unlock();
            break;
        }
        auto aa = aq.front();
        aq.pop_front();
        m.unlock();

        if (false) //testing
        { …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

11
推荐指数
2
解决办法
2645
查看次数

第二次调用setActive(true)时,App不会成为首选的MediaButtonReceiver

我试图按照谷歌的谈话实施媒体按钮控制

我将接收器设置为清单:

<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

<service android:name=".player.PlayFileService">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

创建MediaSessionCompatonCreate()服务:

    mediaSession = new MediaSessionCompat(getApplicationContext(), "SOUNDPROCESS");
    mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
    PlaybackStateCompat ps = new PlaybackStateCompat.Builder()
            .setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY_PAUSE)
            .build();
    mediaSession.setPlaybackState(ps);
    mediaSession.setCallback(new MediaSessionCompat.Callback() {
        @Override
        public void onPlay() { ...
           }
    });
Run Code Online (Sandbox Code Playgroud)

并处理意图 onStartCommand()

MediaButtonReceiver.handleIntent(mediaSession, intent);
Run Code Online (Sandbox Code Playgroud)

然后,setActive(true);当我获得音频焦点时,然后setActive(false);当我停止播放时,我会打电话.这是第一次,我的应用程序成为首选媒体按钮接收器并接收回调.

但是,如果我在我的应用程序中停止播放,请进入另一个应用程序,如Google Play音乐并开始在那里播放,然后返回我的应用程序并调用setActive(true)Google Play音乐继续接收回调,媒体按钮在我的应用中无效.

根据我的理解,最后一次调用setActive(true)应优先考虑.我已经确认isActive()返回true.我也可以通过MediaSessionCompat每次创建一个新的方法解决这个问题,但这似乎并不理想.

每次打电话时,如何让我的应用程序成为首选的媒体按钮接收器setActive(true)? …

android android-mediasession

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

如何使用 ViewModel 的新保存状态模块

我使用的是生命周期版本 2.2.0-rc03,发现的官方文档和文章甚至没有列出正确的类名或构造函数参数。我想我必须通过这样的事情来获取 ViewModel 实例

viewModel = ViewModelProvider(this, SavedStateViewModelFactory(requireActivity().application, savedStateRegistryOwner))
            .get(SelectedTracksViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚 SavedStateRegistryOwner。

有人可以举一个简单的例子来说明如何创建保存状态的 ViewModel 实例以及在 ViewModel 中保存和恢复值的正确方法吗?

android android-savedstate android-viewmodel

11
推荐指数
2
解决办法
8423
查看次数

几分钟后亚行断电

升级到Android Studio 2.2后,adb将在几分钟(约15分钟)后断开与我的设备的连接.我必须重新插入设备或禁用ADB并且每次都可以重命名.它适用于所有设备.这是在MacOS Sierra上.他们添加了超时设置吗?

android adb android-studio android-studio-2.2

8
推荐指数
2
解决办法
1927
查看次数

FFmpeg:无法在Android Q上使用文件描述符进行搜索

考虑到公共文件路径通常在Android Q中不可用的事实,我试图找出如何使FFmpeg音频解码器与文件描述符一起工作,而不将文件复制到应用程序的私有目录中。

我们可以使用Android Q隐私更改中所述的方法轻松获取文件描述符,并且可以使用管道协议打开文件描述符,如将本地fd int从可打开的URI传递给FFMPEG中所述。但是,使用找不到结果,av_seek_frame并且使用的duration成员也不提供持续时间AVFormatContext

有没有办法使用FFmpeg使用文件描述符进行搜索并检索持续时间?

android ffmpeg pipe file-descriptor android-10.0

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