10

最初のベータ版が出て以来、私は「本当の」マルチタスクが可能かどうかを調べてきました。つまり、プログラムをバックグラウンドに置いて、ネットワーク接続を無期限に維持できますか?

たとえば、IM や IRC アプリについて考えています。私は自分で iOS 4 でアプリをコンパイルしましたが、何かを変更せずにバックグラウンドで実行されているように見えましたが、メモリに一時停止されただけでした。

ドキュメントによると、最大 10 分のリクエストを行うのが最善の方法ですが、開発者のプレゼンテーションでは、Skype がバックグラウンドで待機し、電話がかかってきたことをユーザーに通知することを披露しました。

4

10 に答える 10

10

答えはノーのようです。Skype の API は、「voip」モードと呼ばれる非常に特殊なケースであり、VoIP 用に使用中のソケットをマークするなどの特別な動作が必要です。

バックグラウンドでアラーム通知(経過時間など)を受け取ることができます。バックグラウンド実行状態にある時間は、OS によって厳しく制限されています。

Android のバックグラウンド モデルは完成しており、多くの点でより優れています。

Apple には、「Supporting Multitasking In Your Applications」という名前のガイドがあり、見つけることができるはずです。

于 2010-06-09T05:53:00.727 に答える
8

AppleのiOS4開発者向けドキュメントは、これをすべて非常に明確に概説しています。

アプリを閉じるか、アプリから切り替えると、ほぼ即座に「一時停止」されます。つまり、OSがアプリの状態をフリーズします。ユーザーがアプリに戻ると、コードは中断された場所で実行され続けます。これを行うためにアプリにコードを追加する必要はありません。OS4に対してコンパイルするだけです。

上記はほとんどの場合に当てはまります。「一時停止」モデルが適用されない理由は2つあります。

1)デバイスのメモリが不足し始めると、OSは、しばらくの間切り替えられていない一時停止中のアプリを警告なしに終了し始めます。これが、アプリがその状態も記憶することが最善の理由です。そのため、アプリを終了してから再度開いても、中断したところから右に戻るため、ユーザーは実際には気づきません。

2)アプリは「バックグラウンド」APIの1つを使用します。これらは、オーディオ再生、VoIPサービス、または位置情報サービス用です。この場合、アプリはバックグラウンドでの実行を継続できますが、それらのAPIにのみアクセスできます。さらに、アプリは、Flickrへの写真のアップロードやビデオのレンダリングなど、アプリが一時停止または終了する前に完了する必要がある特定の長時間実行タスクを「バックグラウンドタスク」として指定できます。

「バックグラウンドタスク」方式では、タスクに時間制限があり、その後強制的に停止されるため、サーバーへのpingを無期限にカバーすることはできません。この種の機能を必要とするアプリは、以前と同様にプッシュ通知を実装することが期待されています。

これで問題が解決するはずです。全体として、これはモバイルデバイスでのマルチタスクに対する非常に洗練されたソリューションだと思います。

于 2010-06-16T17:21:24.843 に答える
1

iOS 4 には、「本物の」マルチタスキング機能がある程度備わっています。考慮すべき点が 2 つあります。

  • UI イベント ループはシングル タスクです。したがって、フロント アプリのみが UI イベント ループで実行されます。大したことではありません: メイン コードを UI イベント ループから切り離します (おそらく、アプリを再設計する必要があります)。
  • OS は、いくつかの基準が満たされた場合 (メモリ不足など)、アプリを終了することがあります。

現在、これらの基準の 1 つは、実行時間が 10 分 (CPU 時間ではなくリアルタイム) に制限されていることです。ただし、これが変更され、アプリのバックグラウンド終了の基準が改善されることを期待しています (そうなることを願っています)。

これとは別に、バックグラウンドでタイマー (イベント ループ)を使用できます。

于 2010-06-28T08:03:22.213 に答える
1

iOS 4.2 には本当のマルチタスキングさえありません。アプリは状態に関連するタスクのみを完了することが許可されるため..短い時間間隔で中断状態になります..バックグラウンドタスクを長時間設定すると...予期しない動作をしますどこからでもアプリを実行しようとすると、メソッドは呼び出されません..

于 2010-12-09T05:17:14.567 に答える
1

アプリがバックグラウンド時間を要求することは可能です。ドキュメントを読んでください。iOSは「制御されたマルチタスク」だと思います。

于 2010-06-16T17:25:56.557 に答える
1

長時間実行されるバックグラウンド タスクを作成できます。これには、ネットワーク機能を含めることができると思います。作業ブロックにバックグラウンド タスク フラグを設定するだけです。

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

OSはあなたが得る時間を正確に制限することができます...あなたの時間がいつ終わるかを教えてくれるので、うまくクリーンアップするチャンスがあります.

于 2010-06-26T15:58:57.480 に答える
1

iOS 4 アプリケーションは、実行中または一時停止中のいずれかになります。オペレーティング システムは、要求されたアプリケーションをできるだけ多くメモリに保持しようとしますが、他のすべてのアプリケーションは中断されます。

バックグラウンドで実行されるアプリケーションは、ナビゲーション、オーディオ、VOIP などの機能にアクセスできます (ただし、インスタント メッセージングは​​アクセスできません)。そのため、運が悪い可能性があるようです。

-- Apples iPhone 4 での PC World マルチタスキング

于 2010-06-09T05:51:04.407 に答える
0

iPhone OS 4 や Android などのシステムで「マルチタスク」がどのように機能するかについて概説しているこのブログ投稿に興味があるかもしれません。

于 2010-06-09T06:00:09.320 に答える
0

実際、Apple では許可されていませんが、これを行うことができます。Mac でツールチェーンをセットアップし、非公式の SDK を使用する必要があります...

詳細については、 http://code.google.com/p/iphone-backgrounder/を確認してください

于 2010-12-02T08:04:16.883 に答える
0

作成している機能セットには、プッシュ通知フレームワークを使用する必要があります。

于 2011-05-18T20:56:49.967 に答える