小编DJa*_*ayC的帖子

onNewIntent()生命周期和已注册的侦听器

我正在使用singleTop Activity来通过搜索对话框接收意图onNewIntent().

我注意到的是onPause()之前调用过onNewIntent(),然后调用它onResume().视觉:

  • 搜索对话框已启动
  • 搜索意图触发了活动
  • onPause()
  • onNewIntent()
  • onResume()

问题是我有注册的监听器onResume()被删除onPause(),但在onNewIntent()通话中需要它们.有没有一种标准方法可以让这些听众可用?

lifecycle android android-intent

140
推荐指数
2
解决办法
9万
查看次数

从InputStream读取时发生IOException

我在从Android平台上的InputStream读取时遇到了一个奇怪的问题.我不确定这是Android特定的问题,还是我一般都做错了.

唯一特定于Android的是此调用:

InputStream is = getResources().openRawResource(R.raw.myfile);
Run Code Online (Sandbox Code Playgroud)

这将从Android资产返回文件的InputStream.无论如何,这是我遇到问题的地方:

bytes[] buffer = new bytes[2];
is.read(buffer);
Run Code Online (Sandbox Code Playgroud)

当read()执行时抛出IOException.奇怪的是,如果我执行两个连续的单字节读取(或任意数量的单字节读取),则没有例外.例如,这有效:

byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Run Code Online (Sandbox Code Playgroud)

任何想法为什么两个连续的单字节读取工作,但一次调用同时读取两个引发异常?该InputStream中似乎罚款... is.available()回报超过一百万个字节(因为它应该).

堆栈跟踪显示在以下行之前的这些行InputStream.read():

java.io.IOException
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$800(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
Run Code Online (Sandbox Code Playgroud)

将缓冲区大小更改为单个字节仍会引发错误.看起来只有在读入字节数组时才会引发异常.

如果我将文件截断为100,000字节(文件最初为:1,917,408字节),它可以正常工作.超过一定大小的文件有问题吗?

任何帮助表示赞赏!
谢谢!

java android inputstream ioexception

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