質問は(タイトルに記載されているように)広すぎます。シングルトンの目的によって異なります。
あなたの場合、明らかな質問: 初期化が失敗した場合、問題が近い将来に解決されると期待できますか? アプリを再起動するだけでなく、試行し続ける (アプリが奇妙な方法で下方にクラッシュしないように再設計する) ことのコストはいくらですか?
エラーを簡単に解決できない場合は、アプリケーションをクラッシュさせてください (適切なログ/アラート/通知を使用してください)。問題が解決するまで実行し続けたい場合、手順は次のようになります。
1)初期化をシングルトンのコンストラクターに渡します(コンストラクターへのアクセスを制御できる場合、なぜそれを静的ブロックに入れるのですか)。
2a) コンストラクターが失敗している間、呼び出しはgetInstance
null を返します。アプリケーションを変更して、それを処理できるようにします。
2b) 問題が存在する場合は、適切な初期化なしでシングルトンを作成します。このオブジェクトのメソッドへの呼び出しは、初期化の問題が解決されるまで、またはオブジェクトが初期化されるまで何もしません。これらのダミー メソッドを処理できるようにアプリケーションを変更します。この方法はより迅速ですが、より複雑です。
3) 新しいインスタンスが要求されたとき (2a の場合)、またはメソッドが呼び出されたとき (2b の場合)、オブジェクトを初期化できるかどうかを再度確認します。
以前のすべてのコストと、問題が解決した後にアプリを再起動するだけのコストを比較してください。