小编Sta*_*tan的帖子

Firefox for Android在点击链接时无法启动应用

Firefox不会按照应有的方式触发点击链接的意图.因此,无法通过点击Firefox中的链接启动他们的应用程序(可以在Chrome和其他浏览器中使用).

编辑:请记住,这是2013年的帖子.

所需的行为如下:在我的网站上,我有一个链接,点击后应启动我的Android应用程序.如果未安装该应用,最好打开Goog​​le Play中的页面进行下载.

方法

我实现它的方式是使用以下形式的"intent URI": intent://myhost.com/#Intent;scheme=myscheme;package=com.myapp;end

在应用程序中,我在清单中注册了一个intent过滤器并监听匹配的意图.但是,单击链接时,浏览器需要触发此类意图,以便我的应用程序可以启动.

我已经使用各种浏览器测试了这种方法,并且它适用于大多数浏览器.除了Firefox之外的明显例外.使用其他浏览器,我的应用程序将启动,或者Google Play中的页面加载(如果设备上未安装该页面).

具有"意图URI"的方法是Google推荐的方法.它在Chrome和其他一些浏览器上运行良好.还有其他方法.我已经阅读了许多有关可能性的主题和文章.主要的替代方案是:

替代方法

  1. 使用自定义方案,如 myscheme://mywebsite.com
  2. 使用常规的http链接,比如 http://mywebsite.com

不推荐备选方案1有两个原因: - 我没有这样的方案,它在全球范围内不存在,这是错误的.谷歌也曾用它market://...来启动谷歌播放应用程序,但他们承认这是错误的,应该改变. - 如果我的应用程序当前未安装,则不会启动它,并且大多数浏览器都会显示错误页面,这显然是不合需要的.

备选方案2在大多数浏览器上不起作用,似乎不赞成使用"意图URI"方法.

特别是Firefox

仅适用于自定义方案(备选方案1).在常规http链接(备选2)的情况下,它只加载链接并显示网站.在推荐的"intent URI"方法的情况下,它什么都不做.实际上,它会显示一个对话框,询问您是否要启动应用程序,但是当您单击是时,没有任何反应.所以似乎Firefox识别像" intent://..." 这样的链接,但没有正确处理它们.

问:从Firefox中的链接启动应用程序的推荐方法是什么?为什么Firefox不支持"intent URI"方法?

相关链接:https : //developers.google.com/chrome/mobile/docs/intents /sf/answers/243055991/(请记住,该主题很老)

firefox android url-scheme intentfilter android-intent

27
推荐指数
1
解决办法
8916
查看次数

由于方向已更改或应用正在关闭,活动是否被销毁?

我有一个启动AsyncTaskActivity.允许活动以纵向或横向显示.更改方向时,将销毁并重新创建活动.无论方向改变多少次,任务都会继续工作.它还将结果成功返回给活动(根据CommonsWare的答案http://goo.gl/WF1yW).

我想要实现的是:当活动因应用程序关闭而被销毁 - 应该取消任务.但是,当活动因方向更改而被销毁时- 不应取消任务.

基本上问题是如何区分这两种情况:应用是关闭/方向改变.在这两种情况下都会调用onDestroy()方法,并且没有简单的方法可以检查isChangingOrientation()...

PS如果有必要,我也可以考虑采用完全不同的方法.

android android-asynctask android-activity

14
推荐指数
3
解决办法
5505
查看次数

在onDestroy中进行所有清理是否安全?

更具体地说:在onDestroy中取消任务是否安全?另外,使用onDestroy来取消注册接收器和释放资源是否安全?

我的目的是确保在活动被销毁时取消/销毁我的任务,但不是之前.

的onDestroy():

  1. 在活动被销毁并且必须释放资源时调用.
  2. 当活动被匆忙销毁时(系统资源不足等),不会调用它.

第一个案例很清楚:我在onDestroy上做了所有的清理,没有出现任何问题.第二种情况虽然有点问题.当Activity被销毁并且onStroy被跳过时(所以我不取消我的任务),是否可能发生任务继续执行,然后完成并尝试更新死活动,以便应用程序崩溃?


我们来到真正的问题:

  1. 当一个Activity被杀死并且跳过onDestroy时,附加到该Activity的所有东西都会被自动销毁吗?(仅在一切都将被彻底清除的情况下才会跳过onDestroy 吗?任务,注册接收器等)
  2. 如果跳过onDestroy这是否意味着整个应用程序被杀死?

让我们关注onDestroy(),因为解决方案不在onPause()或onStop()中.参数:

  • 可以在销毁Activity时跳过onStop(),就像onDestroy一样
  • onPause被调用得太早且太频繁,所以它不适合用例.例子:

屏幕锁定:设备屏幕锁定时可以调用onPause .这通常就像屏幕保护程序一样,用户立即解锁,因为他站在那里看着屏幕.取消任务并停止我的应用在这种情况下所做的一切只会降低用户体验.我不希望我的应用程序因为偶然的"屏幕保护程序"而窒息而行为不端.

在一个示例应用程序中,我有两个活动屏幕.用户可以在它们之间快速切换.在这个应用程序中,用户倾向于经常快速地切换屏幕.

导航:其中一个屏幕有一个地图,可从系统接收位置更新.它记录了位置(路径)变化的精确图形日志,因此需要不断运行,直到活动关闭.通常我会在onResume和onPause中注册和注销任何接收器.但是,这会使应用程序非常不可用,因为每次用户导航时地图上的更新都会停止.因此,我想取消注册onDestroy中的接收器.

加载列表:第二个屏幕有一个列表,显示来自Web服务的数据.下载数据需要4秒钟.我使用AsyncTask,我知道我应该在必要时取消.它不应该在onPause中取消,因为它应该在用户在屏幕之间切换时继续加载.因此,我想在onDestroy中取消它.

可以有更多的例子.其中一些可能并不完全适合每个人(您甚至可能建议使用服务而不是AsyncTask).但这个想法很重要,所有人都有相同的想法:继续做一些特定于Activity的工作,而Activity 暂停,但是当活动被销毁时,ENSURE停止这样做.(无论我使用的是AsyncTask还是Service,都无关紧要.在任何一种情况下,都应该在Activity被销毁时停止工作.)

PS如果答案是在onDestroy中进行清理是不安全的,这意味着Android框架要求我们停止在onPause中执行的所有操作.然后我就没有看到使用onDestroy的任何理由......

android activity-lifecycle ondestroy android-asynctask android-activity

13
推荐指数
1
解决办法
1804
查看次数

ClassNotFound:android.view.ViewStructure with Support Library 26.0.2 - 27.0.0

我看到三星Galaxy S5在Android 4.4.2上出现了崩溃

NoClassDefFoundError: android/view/ViewStructure
Run Code Online (Sandbox Code Playgroud)

自从我将支持库更新到26.0.2以来,这种情况一直在发生.现在它也发生在27.0.0,尽管我预计这些问题已在其中得到解决.在将应用程序提交到Google Play之后不久,我发现Crashlytics发生了一次崩溃(我正在推广给我的一小部分用户).我不知道重现的确切步骤是什么.到目前为止,我已经假设它可能是在应用程序启动时.

相关报道:

java.lang.NoClassDefFoundError:android/graphics/drawable/Icon

ViewDebug.getExportedPropertyMethods java.lang.NoClassDefFound android/graphics/drawable/Icon

我使用的是支持库27.0.0,compileSdkVersion 27,targetSdkVersion 25,buildToolsVersion '26 .0.2',android插件2.3.3,gradle 3.3,Android Studio 3.0.(我猜这个问题与旧版本的gradle和插件无关?...)

我可以在支持库中看到ViewStructure用于:

android.support.design.widget.TextInputLayout 
android.support.design.testutils.ViewStructureImpl
Run Code Online (Sandbox Code Playgroud)

但是,我没有在我的项目中的任何地方使用ViewStructure.

Fatal Exception: java.lang.NoClassDefFoundError: android/view/ViewStructure
       at java.lang.Class.getDeclaredMethods(Class.java)
       at java.lang.Class.getDeclaredMethods(Class.java:656)
       at android.view.ViewDebug.getExportedPropertyMethods(ViewDebug.java:960)
       at android.view.ViewDebug.exportMethods(ViewDebug.java:1047)
       at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:997)
       at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:983)
       at android.view.ViewDebug.dumpView(ViewDebug.java:900)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:855)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dump(ViewDebug.java:793)
       at android.view.ViewDebug.dispatchCommand(ViewDebug.java:416)
       at android.view.ViewRootImpl$W.executeCommand(ViewRootImpl.java:6258)
       at android.view.IWindow$Stub.onTransact(IWindow.java:65)
       at android.os.Binder.execTransact(Binder.java:404)
       at dalvik.system.NativeStart.run(NativeStart.java)
Caused by java.lang.ClassNotFoundException: Didn't find class "android.view.ViewStructure" on path: DexPathList[[zip file "/data/app/package.name-1.apk"],nativeLibraryDirectories=[/data/app-lib/package.name-1, …
Run Code Online (Sandbox Code Playgroud)

android classnotfoundexception android-support-library samsung-galaxy android-8.0-oreo

7
推荐指数
1
解决办法
1530
查看次数

重做GIT中错误的合并

很久以前,在 git 历史中我可以看到有人对两个分支进行了错误的合并。他有冲突,所以干脆删除了很多有冲突的修改。结果是主分支不包含这些更改(在检查之前我们甚至没有怀疑它)。

分支功能被合并到分支开发中。功能包含更改 XY Z。但是,Y 和 Z 在合并期间被删除,因此开发仅包含 X。我想再次将功能合并到开发中,因为我需要所有更改。然而,GIT 认为它们已经合并了(它知道它们有冲突并被手动“解决”)。

我该如何进行此合并?

一些注意事项:

  • 我不能简单地合并,更改根本不可见。
  • 我不能挑选,它不起作用。
  • 我不想“只复制文件并再次提交”,因为这意味着 GIT 在关键用例中失败
  • 我尝试使用不同的 git 合并策略并取得了部分成功,但每种策略都遗漏了一些文件,最终我没有在开发中进行所有更改

当然,将功能合并到新分支(从开发提交开始,就在错误提交之前)是可行的。我可以看到所有必要的改变。但同样,由于上述原因,我无法将这个新分支合并到开发中。

git git-merge git-rebase git-merge-conflict

5
推荐指数
1
解决办法
1519
查看次数