私は、最初のAndroidアプリを数人のテスターに送信するアプリのリリースビルドを作成しようとしています。しかし、問題が発生しました。アプリを終了して、アイコンから起動して再入力すると、以前の場所に戻るのではなく、アプリ全体が再起動します。これは、終了直後に再入力しても発生します。ただし、ホームボタンを押したままにしておくと、最近のアプリリストから起動します。
私はこの問題を抱えている他の人をオンラインで検索しましたが、いくつかありますが、なぜ彼らにそれが起こっているのかについての確固たる答えはありませんでした。マニフェストファイルでlaunchmodeをsingletaskまたはsingleinstanceに設定することが古い質問で提案されましたが、それは私を助けませんでした-それに加えて-私が理解していることから、Androidはこの状況でタスクの前の状態に戻るため、それを行うために特別なマニフェストオプションが必要な理由がわかりません。
この問題に関する最も奇妙なことは、Eclipseとデバッガーを使用してスマートフォンにアプリを配置した場合、この問題は発生しないことです。デバッガーに接続する必要さえありません。アプリのデバッグバージョンを持っている限り、問題は発生しないようです。しかし、リリースバージョンを使用する場合(Androidツール-Eclipseで署名済みアプリケーションパッケージをエクスポートするメニューオプションを使用して作成)、問題が発生します。 、あなたの考えを聞いてみたい。
アプリケーションで同じ問題が発生し、AndroidManifest.xmlファイルの"Android:launchMode="singleTop""
宣言で"Android:launchMode="singleTask""
の代わりに<activity>
フラグを追加してこの動作を解決しました。これが誰かを助けることを願っています。
これまでのところ、実際のデバイスへのインストール方法に基づいた問題であることがわかりました。具体的には次のとおりです。
次のオプションのいずれかを使用してインストールすると、この問題は発生しません。
ターミナルまたはコマンドプロンプトを使用してsdk/tools /に移動し、次に入力します
_adb install <FILE PATH OF .APK FILE>
_
Linuxでは、次を入力します。
_./adb install <FILE PATH OF .APK FILE>
_
Eclipseからプロジェクトを実行するだけです。
ベータテスト用に正しいAPKを配布する方法があるかどうかを知りたい。 APKをコピーして貼り付けて手動でインストールすると不正な動作が表示されるため、署名済みのAPKをエクスポートしようとしました。
更新:
私は解決策を見つけました。次の2つの手順に従います。
Android:launchMode="singleTask" = true
_を設定します。このコードをランチャーアクティビティのonCreate()
に配置します。
_if (!isTaskRoot())
{
final Intent intent = getIntent();
final String intentAction = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
}
_
この動作はAndroidのバグです。特別な場合ではありません。
LaunchModeをsingleTopとして使用できますAndroidManifest.xmlのランチャーアクティビティ
<activity
Android:name="<YOUR_ACTIVITY>"
Android:label="@string/app_name"
Android:launchMode="singleTop">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
// To prevent launching another instance of app on clicking app icon
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
setContentViewを呼び出す前に、ランチャーアクティビティに上記のコードを記述します。これで問題が解決します
これはAndroidのデフォルトの動作です。デバッグビルドでは、何らかの理由で動作が異なります。アクティビティにAndroid:launchMode="singleInstance"
を追加することで解決できます。アイコンから起動した後に再起動する必要があります。
これを最初のアクティビティに追加します。
if (!isTaskRoot()) {
finish();
return;
}
super.onCreate(savedInstanceState);
次の例に示すように、Android:alwaysRetainTaskState
を使用してみてください。
<activity
Android:name="com.jsnider.timelineplanner.MainActivity"
Android:alwaysRetainTaskState="true"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Android:alwaysRetainTaskState="true"
AndroidManifest.xmlのランチャーアクティビティ用。
<activity
Android:name=".YourMainActivity"
Android:alwaysRetainTaskState="true">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
詳細については、 https://developer.Android.com/guide/topics/manifest/activity-element.html#always をご覧ください。
私にとっては、修正はLaunchMode = LaunchMode.SingleTop
メインアクティビティのアクティビティ属性:
/// <summary>
/// The main activity of the application.
/// </summary>
[Activity(Label = "SilhuettePhone",
Icon = "@drawable/icon",
Theme = "@style/MainTheme",
MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation,
ScreenOrientation = ScreenOrientation.Portrait,
LaunchMode = LaunchMode.SingleTop,
WindowSoftInputMode = SoftInput.AdjustResize)]
Androidで戻るボタンを押すと、onDestroy
メソッドが呼び出されます(onPause()
メソッドのみが呼び出されるホームボタンを押すのとは対照的です)。
中断したところからアプリを続行する必要がある場合は、アプリの状態をonDestroy()
メソッドに保存し、その状態をonCreate()
メソッドに読み込みます。
この問題はAndroid 2019年のTVで見られます。より良い修正はありますか?
if (!isTaskRoot()) {
finish();
}
動作しますが、実際のソリューションよりもハッキングのように見えます。
私にとっては、間違って投稿したことがわかったNoHistory = true
私のアクティビティ属性
[Activity(NoHistory = true, ScreenOrientation = ScreenOrientation.Landscape)]
これにより、アプリがこのアクティビティに再開できなくなり、再起動しました
上記のすべてのソリューションは、すべてのデバイスで一貫して機能しませんでした。一部のSamsungで機能しましたが、すべてではありませんでした。
私にとって問題の原因は、APKを手動でインストールすることでした。